问题:给定一个有序链表反转和合并链表
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 =中间节点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由两个节点和y乘1个节点。
7->1->3->2->6->5->4 x y
现在,如果(X!= Y){交换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
问:
有没有一种简单的方法来做到这一点?
合并步骤如何工作? – codewarrior 2013-02-19 21:21:03
第二个列表中的1个,第一个列表中的1个,第二个列表中的第一个等等。 – 2013-02-20 06:23:05
需求是使用恒定空间;将两个列表分开合并需要单独的输出列表。我试图改变原始列表中的指针,以获得输出.. – codewarrior 2013-02-21 23:12:39