2013-05-02 59 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。