數據結構與算法(四)鏈表(四)- 單鏈表原地反轉

public class ReverseLinkedList {
    @Test
    public void test() {
        System.out.println("======================================");
        ReverseLinkedList reverseLinkedList = new ReverseLinkedList();

        reverseLinkedList.insert(2);
        reverseLinkedList.insert(234);
        reverseLinkedList.insert(2345);
        reverseLinkedList.insert(23456);
        System.out.println("====================================== "+reverseLinkedList.insert(234567));
        reverseLinkedList.show();
        System.out.println("======================================");
        reverseLinkedList.insertHead(new Node(1));
        reverseLinkedList.show();
        System.out.println("======================================");
        reverseLinkedList.reverse();
        reverseLinkedList.show();
        System.out.println("======================================");
    }

    class Node {
        int data;
        Node next = null;

        public Node(int data) {
            this.data = data;
        }
    }

    Node head = null;
    int size = 0;

    public int insert(int data) {
        Node temp = new Node(data);
        if (head == null) {
            head = temp;

            return ++size;
        }
        Node currentHead = head;
        while (currentHead.next != null) {
            currentHead = currentHead.next;
        }
        currentHead.next = temp;
        return ++size;
    }

    public void insertHead(Node node) {
        if(head==null){
            head = node;
            return;
        }
        Node temp = head;
        node.next = temp;
        head = node;
    }

    public void show(){
        Node current = head;
        while (current!=null){
            System.out.println("current = "+current.data);
            current = current.next;
        }
    }

    public void reverse(){
        Node current = head;
        if(current==null){
            return;
        }
        while (current.next!=null){
            //臨時保存要移動的node的next
            Node temp = current.next.next;
            //要移動的node放到鏈表最前端
            insertHead(current.next);
            //頭結點指向移動後的node的next
            current.next = temp;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章