冻鸦2345 2022-09-19 18:35 采纳率: 82.6%
浏览 217

浙大PTA 7-24 求链式线性表的倒数第K项,结果有错误

问题遇到的现象和发生背景

浙大PTA 7-24 求链式线性表的倒数第K项
我的思路是建立循环双链表,以尾指针来遍历整个链表,若K的位置距头结点较近,
则利用长度关系改为求查找正数第n位的数字。
其中第二个测试点出错。
在测试时有两个地方存在疑惑:
1.如果输入的K值大于链表长度1位,则会输出结果0,而我本意是输出“NULL”
2.在if(K>=1&&K<0.5*p->next->length)中,我认为令count等于1才会输出正确结果,可实际测试中count=1才正确

此题虽然大部分测试点正确,我却难以理解这个程序了,希望各位指正

用代码块功能插入代码,请勿粘贴截图
/*
思路:
初始化双向循环链表,通过在链表长度较大时,
若K在链表的后后半段,
则利用长度关系改为求查找正数第n位的数字
*/
#include<iostream>
using namespace std;

#define OK       1
#define OVERFLOW -2
#define ERROR    0

typedef int ElemType;
typedef int Status;

typedef struct DuLNode{
    ElemType data;
    int length;
    struct DuLNode* prior;
    struct DuLNode* next;
}*DuLinkList,DuNode;

DuNode* Cre_Dul(){
    int m;
    DuNode* head;
    DuNode *rear,*cur;
    head=(DuNode*)malloc(sizeof(DuNode));
    head->next=NULL;
    head->prior=NULL;
    head->length=0;
    rear=head;
    while(scanf("%d",&m)!=-1){
        cur=(DuNode*)malloc(sizeof(DuNode));
        cur->data=m;
        cur->prior=rear;
        cur->next=NULL;
        rear->next=cur;
        rear=cur;
        head->length++;
    }
    
    head->prior=rear;
    rear->next=head;
    return rear;
}

void Find_Dul(DuLinkList &L,int K){
    int count;
    int m;
    DuNode* p=L;
    if(K<1||K>p->next->length)
    {
        printf("NULL\n");
    }
    if(K>=1&&K<0.5*p->next->length)
    {
        count=0;
        while(count!=K)
        {
            p=p->prior;
            count++;
        }
        printf("%d",p->data);
    }
    if(K>=0.5*p->next->length&&K<=p->next->length)
    {
        count=0;
        K=p->next->length-K+1;
        while(count!=K)
        {
            p=p->next;
            count++;
        }
        printf("%d",p->data);
    }
    
    
}

int main(){
    int K;
    DuNode* L;
    scanf("%d",&K);
    L=Cre_Dul();
    Find_Dul(L,K);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:38
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月19日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?