问题遇到的现象和发生背景
浙大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;
}