使用2个指针反转链接列表

时间:2018-11-16 12:18:50

标签: c++ linked-list

我编写了一个代码,使用两个指针来反向链接列表。一次,我在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;
}

这里的逻辑错误是什么?

2 个答案:

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