创建双链表问题

问题描述 投票:0回答:1

我的问题是,当我尝试打印此10个元素列表时,Eclipse中什么也没有发生。我读到它的原因是某个地方存在Null指针异常,但我似乎找不到它。预先感谢您的帮助!

DLinkedList* createList()
{
    int i=0;
    DLinkedList* head = NULL;
    DLinkedList* temp = NULL;
    DLinkedList* temp2 = NULL;

    temp = (DLinkedList*)malloc(sizeof(DLinkedList));
    temp2 = (DLinkedList*)malloc(sizeof(DLinkedList));
    temp->sensorData = readSensor()->sensorData;
    temp->next = NULL;

    for(i=0; i<10; i++)
    {
        if(head == NULL)
        {
            head = temp;
            head->prev = NULL;
            printf("1 \t");
        }
        else
        {
            temp2 = head;
            while(temp2->next != NULL)
            {
                temp2 = temp2->next;
            }
            temp2->next = temp;
            temp->prev = temp2;
            printf("2 \t");
        }
    }

    return head;
}
c linked-list doubly-linked-list
1个回答
0
投票

在整个循环中,temp指向同一块内存,代表单个节点。您正在反复设置该节点的nextprev指针指向自身。

在我看来,当您尝试构建列表时,这将导致无限循环。在第二次迭代之后,遍历列表将永远不会结束,因为每次您步入下一个节点时,您实际上都在看同一个节点。

您可能希望在循环的每次迭代中使用新的malloc调用来重新初始化temp,因此您实际上得到了不同的节点。

((也无需使用malloc初始化temp2。您永远不会对该内存进行任何操作。temp2的第一个用途是为其分配head的值,该值将其指向其他位置。)

© www.soinside.com 2019 - 2024. All rights reserved.