创建双链表问题

Creating a double linked list problems

我的问题是,当我尝试打印这个包含 10 个元素的列表时,Eclipse 中没有任何反应。我读到它是因为某处出现空指针异常,但我似乎找不到它。在此先感谢您的帮助!

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

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

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

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

(此外,无需使用 malloc 初始化 temp2。您永远不会对该内存做任何事情。temp2 的第一个用途是将其赋值为 head 指向其他地方。)