【问题标题】:Infinite loop occuring in linked list链表出现无限循环
【发布时间】:2013-04-26 06:35:18
【问题描述】:

我有一个链表,其中包含一个遍历链表并打印出链表中结构值的方法。

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

【问题讨论】:

  • 您在创建/插入列表时可能搞砸了,最后一项没有将其 next 指针设置为 null。
  • 你能发布你的 LinkListNode 结构吗?
  • 旁注:你的计数是错误的第一个sn-p。即使在具有 NULL 头的列表上,它也会评估为 1。希望它的价值不重要。

标签: c loops data-structures linked-list


【解决方案1】:

创建新列表节点时忘记将 next 指针设置为 NULL:

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

顺便说一句:其余的来源可以在this相关主题中找到。

【讨论】:

  • 不,演员阵容很糟糕。 sizeof(TYPE) 也是如此。和类型定义。但是我不能评论风格,所以最近有人告诉我。
【解决方案2】:

您是否检查过您的 LinkedList 结构是否是循环的?它可能发生在循环链表的情况下

【讨论】:

    【解决方案3】:

    这个方法是正确的。检查每个节点是否正确连接到下一个节点,以及最后一个节点是否连接到NULL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多