如果在最初的后方之后移动一组节点,则需要更新循环链接列表的后方的帮助。

假设后方是后方节点,而后方.next循环回到[1]

[1][2][3][4][5]
<-------------/


如果我将[1][2][3]移到节点[5]给我之后

[4][5][1][2][3],它会中断循环链接列表,

如何将[3]更新为Rear和Rear.Next指向[1]

最佳答案

由于链接集的性质是一个圆圈,因此必须断开链接并在移动后重新建立链接。这里的重要链接是将要“断开”的链接,即(如果我假设是单链接列表,则是),[3] -> [4]的链接和[5] -> [1]的链接。

您的列表中有两个部分,分别是我们可以称为[1][2][3]A和可以称为[4][5]B。下面显示的-->链接是指向列表中第一个元素的指针。

--> A -> B -+
    ^       |
    |       |
    +-------+


您想要做的就是重置链接,以使A中的最后一个元素指向B中的第一个元素,而B中的最后一个元素指向A中的第一个元素。此外,列表的开头现在是B中的第一个元素。

--> B -> A -+
    ^       |
    |       |
    +-------+


因此,现在我们只需要断开并重置链接即可。

--> [1][2][3] -> [4][5] -+         --> [4][5] -> [1][2][3] -+
     ^                   |    =>        ^                   |
     +-------------------+              +-------------------+



将列表的开头设置为B的第一个元素,即[4]
B中的最后一个元素设置为[5],以指向A中的第一个元素设置为[1]。碰巧已经设置好了,但是不要指望它。 :)
A中的最后一个元素设置为[3],以指向B中的第一个元素设置为[4]


如您所见,我们真正关心的唯一节点是列表中每个部分的第一个和最后一个元素,即AB的开始和结束元素。在这种情况下,这些部分中的一个也包含第一个元素,因此我们不得不移动哪个元素是“第一个”元素的概念。希望这可以帮助。

关于java - 如何在循环链表中更新后方?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4974710/

10-10 16:54