【发布时间】:2013-02-03 17:05:32
【问题描述】:
问题:给定一个排序的链表
1->2->3->4->5->6->7
更改链表中的指针使其成为可能
7->1->6->2->5->3->4
使用常量空间。
我尝试使用以下算法解决它:
- 使用 2 个节点,一个快速节点和一个慢速节点来查找链表的中间节点。
-
从中间节点反转链表。将中间节点标记为y,开始节点标记为x。
1->2->3->7->6->5->4 x y -
如果 y=middle node AND y!= x.next,则交换 y 和 x.next。然后交换 x 和 x.next。
1->7->3->2->6->5->4 x y 7->1->3->2->6->5->4 x y将 x 前进 2 个节点,将 y 前进 1 个节点。
7->1->3->2->6->5->4 x y -
现在 if (x != y) { 交换 x 和 y }
7->1->6->2->3->5->4 x y -
x 前进两个节点,y 前进 1 个节点
7->1->3->2->6->5->4 x y - 重复第 4 步和第 5 步,直到 y 变为空(到达链表末尾)或 x == y
所以我们终于得到了
7->1->6->2->5->3->4
问题:
有没有更简单的方法来做到这一点?
【问题讨论】:
标签: algorithm data-structures linked-list