更简单的方法来扭转双重链接列表"由于某种原因不起作用

时间:2015-04-24 15:46:52

标签: c++ algorithm

我知道"扭转双重链接列表"之前已经被问过并回答过,例如: Reversing a Doubly Linked List 但我的问题有点不同。

我在网上找到的所有方法都使用"当前节点(TABLE_NAME = "languages" row1: LANGUAGE_NAME = "english", LANGUAGE_DESCRIPTION = "Some words in english" row2: LANGUAGE_NAME = "italian", LANGUAGE_DESCRIPTION = "Some words in italian" )"迭代器并按如下方式进行交换:

curr

节点的类型为:

Node* Reverse(Node* head)
{
    Node* curr=head;
    while(curr)
    {
        swap(curr->next, curr->prev);
        head=curr;

        curr=curr->prev;
    }
    return head;
}

现在的问题是,我试图通过省略struct Node { int data; Node *next; Node *prev } 迭代器来简化代码,因为它看起来对我来说完全没用。这是新代码:

curr

这适用于纸张然而当我在在线编译器中测试时,我得到超出时间限制的错误:http://www.mycodeschool.com/problems/reverse-a-doubly-linked-list

我相信我们可以在头节点上进行所有交换,然后将其迭代到prev节点。

您是否发现此代码存在任何逻辑问题?

1 个答案:

答案 0 :(得分:2)

Node* Reverse(Node* head)
{
    while(head)
    {
        swap(head->next, head->prev);

        if(head->prev) head=head->prev;
        else break;  // !!!
    }
    return head;
}