2016-03-12 57 views
2

我不知道爲什麼我的方法對於給定的問題無效。來自單個鏈表的尾部的第n個數據

下面是代碼:

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

} 

有什麼不對的代碼?

回答

5
  1. 你應該在第二個while循環中放置break,否則它不會終止並導致崩潰。
  2. if(len2==len1-n+1)條件有誤。它應該是if(len2==len1-n)
+0

是啊,現在的作品!謝謝 –

1

根據@sat,一旦找到元素,就應該終止,否則當下一個節點的導航包含在else中時,while循環永遠不會退出,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; 
} 
相關問題