我试图在Java中反转链表 这是我的代码。
class Node{
int value; Node next;
Node(int value){ this.value = value; }
}
class LinkedList{
Node head;
void push(int value){
Node new_node = new Node(value);
new_node.next = head;
head = new_node;
System.out.println("new head is"+head.value);
}
void reverseList(Node node){
Node iter = node;
Node prev = null;
while(iter!=null){
Node currentNext = iter.next;
iter.next = prev;
prev = iter;
iter = currentNext;
}
node = prev;
}
// To print the list referred by this node.
void printList(Node node){
Node iter = node;
while(iter!=null){
System.out.print(" "+iter.value);
iter = iter.next;
}
System.out.println("");
}
}
在main()中,
LinkedList list = new LinkedList();
list.push(3);
list.push(2);
list.push(1);
list.printList();// linked list is 1->2->3
list.reverseList(list.head);
list.printList(list.head); // Output is 1
为什么列表在反转列表后没有以正确的orde(3-> 2-> 1)打印?
答案 0 :(得分:0)
您在不重置头部的情况下撤消了列表。
您的打印引用是节点1,现在是尾部
请注意,node = prev
实际上并没有做任何事情,只是重新分配参数,这通常不是一个好主意
答案 1 :(得分:0)
将node = prev;
更改为head = prev;
或更好地通过以下方式撤消链接列表:
void reverseList(){
Node iter = head;
Node prev = null;
while(iter!=null){
Node currentNext = iter.next;
iter.next = prev;
prev = iter;
iter = currentNext;
}
head = prev;
}