交换单链表的最后两个节点

时间:2011-03-13 23:22:45

标签: java linked-list

如何交换链接列表的最后两个节点?我正在尝试使用辅助节点,因为我认为需要避免在此过程中“丢失”节点...

...
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?

我认为我做错了,有什么提示吗?

4 个答案:

答案 0 :(得分:3)

假设您有一个链接列表A -> B -> C,并且您想要交换BC

  1. 设置T * = B(将B存储在某处)
  2. 设置A.next = C
  3. 设置T * .next = C.next(这只是在列表末尾操作时概括了这一点)
  4. 设置C.next = T *

答案 1 :(得分:0)

这看起来像一个单链表。您需要使node4成为node2(后继 node3的节点)的后继者。您还需要node3成为node4的后继者。所以:

  1. 获取对node2node3node4
  2. 的引用
  3. node2.succ设为node4
  4. node4.succ设为node3
  5. node3.succ设为null
  6. 如果你没有明确地获取对所有3个节点的引用,你可以更简单/更有效地(虽然不太清楚)做到这一点,但这应该让你开始。

答案 2 :(得分:0)

你实际上必须跟踪三个节点 - 你要切换的最后两个节点,以及它们之前的节点,以便你可以更新它的指针。

或者,您可以只交换节点值。

答案 3 :(得分:0)

嗯,你已经得到了正确答案: - )

temp和node4引用同一个对象。所以你已成功交换它们。你现在可以让temp超出范围(即不管它)。

所以你不需要将temp设置为任何东西。