【发布时间】:2017-03-11 03:45:30
【问题描述】:
问题陈述如下:
给定一个单链表,编写一个函数来成对交换元素。例如,如果链表是 1->2->3->4->5->6->7,则函数应将其更改为 2->1->4->3->6->5 ->7,如果链表是 1->2->3->4->5->6,那么函数应该将其更改为 2->1->4->3->6->5
这是我的解决方案:
void swapPairs(Node* head) {
if (!head->next || !head)return head;
Node* current = head->next;
Node*prev = head;
while (true) {
Node* next = current->next;
current->next = prev;
if (!next || !next->next) {
prev->next = next;
break;
}
prev->next = next->next;
prev = next;
current = prev->next;
}
}
解决方案的问题是,当它到达函数的末尾时,头部不再指向列表的开头,因为 current 和 prev 都已移动。我在网上看到其他解决方案与我在这里做的事情相同,但也许因为它们是用 C 而不是 C++ 实现的,所以它们的代码的某些方面允许头部保持指向开始列表。
我意识到这可能是一个非常容易解决的问题,但我目前还没有看到解决方案。 在整个算法中保持列表开头的最佳方式是什么?
【问题讨论】:
标签: c++ algorithm linked-list