0

我正在尝试实现一个链表,但遇到了一个非常顽固和令人沮丧的问题。这是相关的代码。

Node* current = list->head;
Node* previous = malloc(sizeof(Node*));
previous = NULL;
while(current != NULL){
    if(current == NULL){
        printf("current is null");
    }
    last = current;
    current = current->next;
    if(last == NULL){
        printf("last is null");
    }
} 

现在的问题是它正在打印

“最后一个为空”

经常但不打印出来

“当前为空”

一次。如果 current 不为空并且我设置 last = current 那么为什么 last 保持为空?

感谢您的任何见解

4

1 回答 1

1

首先,您不想使用sizeof(Node*)which 将分配指针的大小(32 位/64 位/其他取决于平台)。这是没有意义的,因为您可以并且已经使用Node* previous.

其次,表达式 inwhile()检查 current 是否不等于NULL。如果 current 等于NULL它将简单地退出循环,因此您的if(current == NULL)比较将不会执行。

如果将 放在if(current == NULL)后面,则可以使该比较有效current = current->next;。但是,如果last is null已打印,则您的代码也完全存在其他问题,因为current之前必须为 null last。令人惊讶的是它没有给出分段错误或其他东西。

于 2013-11-09T00:30:52.447 回答