获取持久化对象的指针

时间:2011-04-27 10:40:19

标签: java pointers object linked-list

我有一个包含许多列表元素的双链表。所以我可以使用item.next,item.prev等...(如item.next.prev.prev.next.prev也可以) 我想交换两个项目,所以首先我需要存储项目A的下一个和上一个:

Item aprev = a.prev;
Item anext = a.next;

现在我想把b换成:

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!所以这个项目循环到他自己......

我能做什么,我可以交换这些元素?我需要某种临时项目,但当我覆盖它时指向对象的指针何时消失?

2 个答案:

答案 0 :(得分:3)

temp = a.prev;
a.next = b.next;
a.prev = b;
b.next = a;
b.prev = temp;

会做的。

答案 1 :(得分:2)

基本上你将有两个交换操作,一个用于prev指针,一个用于下一个指针:

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 _/