反向链接列表不起作用

时间:2017-08-26 06:38:04

标签: java linked-list

我试图在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)打印?

2 个答案:

答案 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;
}