Я пишу код для обращения двусвязного списка между заданными узлами.
учитывая этот связанный список 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;
- person user1952500   schedule 23.01.2016