【发布时间】:2017-04-21 19:06:28
【问题描述】:
我正在尝试编写一个函数,该函数将双向链表中的“n”个节点从前面移动并添加到后面:
public class PetList {
protected class LinkNode {
protected LinkNode next;
protected LinkNode prev;
protected Pet animal; // note that my data within a node is an object
public LinkNode() {
next = prev = null;
}
}
protected LinkNode first;
protected LinkNode last;
public PetList() {
first = last = null;
}
//...
//... other functions
public void Rotate(int n) {
}
现在我知道如何在后面插入一个节点,例如:
public void insertRear(Pet giraffe) {
LinkNode temp = new LinkNode();
temp.animal = new Pet(giraffe);
if(first == null) {
first = last = temp;
return;
}
temp.prev = last;
last.next = temp;
last = temp;
}
但在我的 Rotate 函数中:
public void Rotate(int n)
我没有对象作为参数。也就是说,我怎样才能创建一个临时链接节点并复制第一个链接节点对象中的数据,然后将我的临时节点移到后面,删除我的第一个节点?还是有另一种更好的方法来做到这一点?感谢您的帮助。
【问题讨论】:
-
移动数据与复制数据不同
-
为什么需要一个对象作为参数?您已经说过您只想将列表中的第一件事移到末尾。
-
取第一个节点,删除它,将下一个节点标记为列表的新头,然后将你的第一个节点放在最后。
-
扩展@njzk2 答案,使
Rotate递归。 -
为什么要新建节点并复制数据?您只需移动现有节点,数据将自动跟随。
标签: java object linked-list