我编写了一个代码,使用两个指针来反向链接列表。一次,我在2个节点之间反转1个指针。代码对我来说看起来不错。
Node* reverse(Node *head)
{
Node *p = head;
Node *q = p->next;
Node *temp;
while (q != NULL) {
temp = p;
p = q->next;
q->next = temp;
temp = p;
p=q;
q=temp;
}
head = p;
return p;
}
这里的逻辑错误是什么?
答案 0 :(得分:1)
Node* reverse(Node *head)
{
if(!head)
return nullptr;
Node *p = head;
Node *q = p->next;
p->next = nullptr;
while(q != NULL)
{
Node *temp = q->next;
q->next = p;
p = q;
q = temp;
}
head = p;
return p;
}
答案 1 :(得分:0)
我错过的是我没有将原始链接列表的第一个节点的下一个指向 NULL 。这就是为什么它进入无限循环的原因。
Node* reverse(Node *head)
{
Node *p = head;
Node *q = p->next;
Node *temp;
p->next=NULL;
while (q != NULL) {
temp = p;
p = q->next;
q->next = temp;
temp = p;
p=q;
q=temp;
}
head = p;
return p;
}