2013-05-02 52 views
0

我有一個鏈表,其中包含一個方法來遍歷列表並打印出鏈接列表中的結構值。鏈接列表中發生無限循環

void testLinkedList(LinkedList* list) 
    { 
     int count = 1; 
     LinkedListNode* current = list->head; 
     while (current != NULL) 
      { 
       printf("%d: Label is is %d\n", count, current->data->label); 
      current = current->next; 
       count++; 
      } 
     } 

我在循環中做了什麼錯誤嗎?它應該在到達最後一個節點時結束,但是隻要我允許,它將繼續循環並打印出幻影數字。

編輯:這是我的insertlast()函數,我用發送到鏈表:

void insertLast(LinkedList* list, TinCan* newData) 
    { 
     int ii = 1; 
    LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode)); 
    newNode->data = newData; 

    //check if queue empty 
    if(list->head == NULL) 
     { 
     list->head = newNode; 
     newNode->next=NULL; 
     } 
    else 
     { 
     LinkedListNode* current = list->head; 
     while (current->next != NULL) 
      { 
      current = current->next; 
      } 
     current->next = newNode; 
     printf("%d", ii); 
     ii++; 
     } 
} 
+8

當您創建/插入到列表中,並且最後一項沒有將其下一個指針設置爲空時,您可能會搞砸了某些東西。 – Mat 2013-05-02 06:58:41

+0

你可以發佈你的LinkListNode結構嗎? – Geek 2013-05-02 06:59:06

+0

方面注意:你的計數是錯誤的第一個片段。即使在具有空頭的列表中,它也會被評估爲1。希望它的價值不重要。 – WhozCraig 2013-05-02 07:09:02

回答

4

你忘了創建一個新的列表節點下一個指針設置爲NULL:

LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode)); 
    newNode->data = newData; 
    newnode->next = NULL; 

BTW:源的其餘部分可在this相關主題發現。

+0

是需要的演員? – 2013-05-02 07:09:58

+0

不,演員陣容糟透了。 sizeof(TYPE)也是如此。和typedefs。但我不能評論風格,所以我最近被告知。 – wildplasser 2013-05-02 07:10:57

+0

謝謝,那個伎倆。 – Dawson 2013-05-02 07:12:12

2

你檢查你的LinkedList的結構是圓形或不?它可能發生在圓形列表的情況下

1

該方法是正確的。檢查每個節點是否正確連接到下一個節點,並確定最後一個節點連接到NULL。