C 单个链表尾部的第n个数据
我不知道为什么我的方法不适用于给定的问题 代码如下:C 单个链表尾部的第n个数据,c,linked-list,C,Linked List,我不知道为什么我的方法不适用于给定的问题 代码如下: void last_to_n(struct node*head,int n) { struct node *temp = head; struct node *temp2 = head; int len1=0,len2=0; while(temp!=NULL) { len1++; temp=temp->next; } while(temp2!=NUL
void last_to_n(struct node*head,int n)
{
struct node *temp = head;
struct node *temp2 = head;
int len1=0,len2=0;
while(temp!=NULL)
{
len1++;
temp=temp->next;
}
while(temp2!=NULL)
{
if(len2==len1-n+1)printf("%d",temp2->data);
else
{
len2++;
temp2=temp2->next;
}
}
}
代码有什么问题吗
如果(len2==len1-n+1)
条件错误。如果(len2==len1-n),则应为
根据@sat,您应该在找到元素后终止,否则while循环将永远不会退出,因为下一个节点导航被包装在else中,并且if条件将继续为true,因为
len2
没有增加
假设最后0个元素是尾部元素:
struct node *temp = head;
struct node *temp2 = head;
int len1 = 0, len2 = 0;
// Count nodes
while (temp != NULL) {
len1++;
temp = temp->next;
}
if (n >= len1)
return;
while (temp2 != NULL) {
if (len2 == len1 - n - 1) {
printf("%d", temp2->data);
break;
}
len2++;
temp2 = temp2->next;
}