我知道"扭转双重链接列表"之前已经被问过并回答过,例如: 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节点。
您是否发现此代码存在任何逻辑问题?
答案 0 :(得分:2)
Node* Reverse(Node* head)
{
while(head)
{
swap(head->next, head->prev);
if(head->prev) head=head->prev;
else break; // !!!
}
return head;
}