链表的反转算法

说到链表的反转,当初第一次接触这个概念的时候,首先想到的办法就是,首先对链表做一个遍历,强行给每个节点记录一个顺序,然后再根据顺序重新构建列表,这种办法虽然可以实现,但是效率不高(主要是取决重新排序生成列表的排序算法复杂度),下面这个办法的算法复杂度仅仅为O(N),附代码

// Java program for reversing the linked list

  

class LinkedList {

  

    static Node head;

  

    static class Node {

  

        int data;

        Node next;

  

        Node(int d) {

            data = d;

            next = null;

        }

    }

  

    /* Function to reverse the linked list */

    Node reverse(Node node) {

        Node prev = null;

        Node current = node;

        Node next = null;

        while (current != null) {

            next = current.next;

            current.next = prev;

            prev = current;

            current = next;

        }

        node = prev;

        return node;

    }

  

    // prints content of double linked list

    void printList(Node node) {

        while (node != null) {

            System.out.print(node.data + " ");

            node = node.next;

        }

    }

  

    public static void main(String[] args) {

        LinkedList list = new LinkedList();

        list.head = new Node(85);

        list.head.next = new Node(15);

        list.head.next.next = new Node(4);

        list.head.next.next.next = new Node(20);

          

        System.out.println("Given Linked list");

        list.printList(head);

        head = list.reverse(head);

        System.out.println("");

        System.out.println("Reversed linked list ");

        list.printList(head);

    }

}

  

猜你喜欢

转载自blog.csdn.net/wd_boy/article/details/82718995