如何交换链接列表的最后两个节点?我正在尝试使用辅助节点,因为我认为需要避免在此过程中“丢失”节点...
...
Node node3 = new Node("Hi", null) ;
Node node4 = new Node("Hello", null) ;
...
// swap node3 & node4
Node temp = node3.succ ;
node3.succ = null ; // this should be the last node now, so i set its pointer to null
node2.succ = temp ; // the second's node successor becomes what used to be the last node
temp = node4 ; // not sure how to use temp here. what should it point to if at anything?
我认为我做错了,有什么提示吗?
答案 0 :(得分:3)
假设您有一个链接列表A -> B -> C
,并且您想要交换B
和C
:
答案 1 :(得分:0)
这看起来像一个单链表。您需要使node4
成为node2
(后继 node3
的节点)的后继者。您还需要node3
成为node4
的后继者。所以:
node2
,node3
和node4
node2.succ
设为node4
node4.succ
设为node3
node3.succ
设为null
如果你没有明确地获取对所有3个节点的引用,你可以更简单/更有效地(虽然不太清楚)做到这一点,但这应该让你开始。
答案 2 :(得分:0)
你实际上必须跟踪三个节点 - 你要切换的最后两个节点,以及它们之前的节点,以便你可以更新它的指针。
或者,您可以只交换节点值。
答案 3 :(得分:0)
嗯,你已经得到了正确答案: - )
temp和node4引用同一个对象。所以你已成功交换它们。你现在可以让temp超出范围(即不管它)。
所以你不需要将temp设置为任何东西。