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;
        }
    }

}
代码有什么问题吗

  • 您应该将中断放在第二个while循环中,否则它将不会终止并导致崩溃
  • 如果(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;
    }