获取指向持久对象的指针



我有一个包含许多列表元素的双链接列表。所以我可以使用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 _/

相关内容

  • 没有找到相关文章

最新更新