【发布时间】:2016-04-29 14:28:30
【问题描述】:
我正在编写用于在给定节点之间反转双向链表的代码。
给定这个链表1->2->3->4->5,
函数 reverse(2,4) 应该导致
1->4->3->2->5.
该函数有两个节点,但没有索引。
这就是我所拥有的。我尝试了 Eclipse 调试器来弄清楚为什么它会无限期地运行。由于某些原因,我看到节点已损坏(当我单步执行下面标记的行时,Eclipse 未显示任何数据)
public static void reverse(Node head, Node tail){
Node prev=head.prev;
Node current=head,next;
while(current!=tail.next){
next = current.next;
current.next=prev;
current.prev=next; //No data stepping after this point
prev=current;
current=next;
}
}
public static void main(String... args){
Node one = new Node(1);
Node two = new Node(2);
Node three = new Node(3);
Node four = new Node(4);
Node five = new Node(5);
five.setNodes(four, null);
four.setNodes(three, five);
three.setNodes(two,four);
two.setNodes(one,three);
one.setNodes(null, two);
System.out.println("before reversing...");
System.out.println(one);
System.out.println("After reversing...");
reverse(two,four);
System.out.println(one);
}
这是我的节点类
class Node {
Node prev;
Node next;
int data;
public Node(Node prev, Node next, int val){
this.prev=prev;
this.next=next;
this.data=val;
}
public Node(int val){
this(null,null,val);
}
public void setNodes(Node prev, Node next){
this.next=next;
this.prev=prev;
}
public String toString(){
String toReturn = "[ " + this.data;
Node current=this.next;
while (current!=null){
toReturn+=" -> " + current.data;
current=current.next;
}
toReturn+=" ]";
return toReturn;
}
}
【问题讨论】:
-
Node current=head,next;是错字(逗号)吗?应该是Node current=head.next; -
@brainstorm 注意 toString 方法。
标签: java algorithm data-structures linked-list doubly-linked-list