我有一个包含许多列表元素的双链接列表。所以我可以使用item.next、item.prev等等…(比如item.next.prev.prev.next.prev也可以(我想交换两个项目,所以首先我需要存储项目A的下一个和上一个:
Item aprev = a.prev;
Item anext = a.next;
现在我想把b换成a:
a.next = b.next;
a.prev = b.prev;
a.next.prev = a;
a.prev.next = a;
现在我需要把a换成b,这样我就可以使用以前保存的物品:
b.next = aprev;
b.prev = anext;
...
现在我有问题了!aprev是a.prev,现在是b.prev!所以这个项目循环到他自己的。。。
我该怎么做才能交换这些元素??我需要一些临时项,但当我覆盖对象时,指向对象的指针不见了,该怎么办?
temp = a.prev;
a.next = b.next;
a.prev = b;
b.next = a;
b.prev = temp;
可以。
基本上,您将有两个交换操作,一个用于前一个指针,另一个用于下一个指针:
swapPrevPointer(a,b);
swapNextPointer(a,b);
带有
private swapPrevPointer(Item a, Item b) {
Item temp = a.prev;
a.prev = b.prev;
b.prev = temp;
}
private swapNextPointer(Item a, Item b) {
Item temp = a.next;
a.next = b.next;
b.next = temp;
}
视觉解释
初始列表:
null <--ap-- A --an--> B --bn--> C
<--bp--
交换后:
null <--ap-- B --an--> A --bn--> C
<--bp--
必要的更改
B.prev <- ap ____ swapping "prev" pointers
A.prev <- bp _/
B.next <- an ____ swapping "next" pointers
A.next <- bn _/