2015-06-12 44 views
2

我在打印一個單獨鏈表時遇到了問題,它必須查找例如: [1:2] [3:4] [7:2] [9:1 ],但結果/輸出沒有最後一個元素,即:[1:2] [3:4] [7:2]。這是我的數據結構:在C++中打印一個簡單的鏈表,數據結構

struct numbers { 
int info1; 
int info2; 
numbers *next; 
}; 

struct numbers* next= NULL; //At first 0,because the list is empty 
struct numbers* head=NULL; //at the beginning 

和作用,我後來打電話:

void printing(numbers *head) { 
numbers *temp=head; 
if(head!=NULL) { 
    do { 
     printf("[%d:%d]",temp->info1, temp->info2); 
     temp=temp->next; 
    } while(temp->next!=head && temp->next!=0); 
} 
    return; 
} 

有沒有搞錯在這個功能呢?

+0

'頭= NULL'應該是'TEMP = NULL' – NendoTaka

+0

同時;!(TEMP =頭&& TEMP = 0!) – Tim3880

+0

temp-> next!= 0應該是temp!= NULL –

回答

1

我不明白的情況

temp->next!=head 

的最後一個節點不outputed的,因爲不是

temp->next!=0 

你必須檢查

temp != 0 

,因爲你已經移到環

temp=temp->next; 

裏面的指針,以便該函數是錯誤的。它應該看起來像

void printing(numbers *head) 
{ 
    for (numbers *temp = head; temp != 0; temp = temp->next) 
    { 
     printf("[%d:%d]", temp->info1, temp->info2); 
    } 
} 
2

while的條件下,我不知道你爲什麼要檢查temp->next!=head

但對於空狀態,你應該檢查temp!=0temp!=NULL代替temp->next!=0

1

只是這段代碼就足夠了。你的代碼的問題是,當它的下一個指針變爲NULL時,你返回,最後一個節點就是這種情況。

void printing(numbers *head) { 
    numbers *temp=head; 
    while(temp != NULL){ 
     printf("[%d:%d]",temp->info1, temp->info2); 
     temp=temp->next; 
    } 
} 
+0

謝謝大家hepp和解釋! –

+0

歡迎您:) –

0

問題是你是前進到下一個節點,然後你檢查該節點是否有一個空的下一個節點。因此,您將永遠不會打印最後一個節點。你可以重寫你的代碼:

void printing(numbers *head) { 
    numbers *temp = head; 
    if (head != NULL) { 
     while (temp != NULL) 
      printf("[%d:%d]", temp->info1, temp->info2); 
      temp = temp->next; 
     } 
    } 
    return; 
}