逆轉單向鏈表看這一篇就夠了【JAVA】

www.cnblogs.com/NiceCui/p/1…

逆轉單向鏈表

逆轉前: 1 -> 2 -> 3 -> 4 -> 5 -> nullhtml

逆轉後: 5 -> 4 -> 3 -> 2 -> 1 -> nullnode

我的博客地址:逆轉單向鏈表bash

方法1、循環迭代

image

public Node reverse(Node head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 取前面節點
        Node pre = head;
        // 取後面節點
        Node cur = head.next;
        // 臨時節點
        Node temp = null;
        while (cur != null) {
            // 1. 保存後節點的指向節點 由於要替換後節點的指向節點爲他的前節點
            temp = cur.next;
            // 2. 把後節點的指向的節點替換成前節點
            cur.next = pre;
            // 下一輪要替換的前節點和後節點
            // 第一次 pre = 1 cur =2  || 那第二次 就得 pre = 2 cur = 3
            pre = cur;
            cur = temp;
        }
        // 在上述過程當中未替換首節點的指向節點 這裏首節點將成爲尾節點 因此指向null
        head.next = null;
        // 由於循環的條件是cur是否爲null 若是cur爲null 那 pre將是原來鏈表的尾節點
        // 就是逆轉後的首節點
        return cur;
    }
複製代碼

方法二:遞歸

public Node recursionNode(Node head) {
         if (head == null || head.next == null) {
            return head;
        }
        // head 1 2 3 4
        Node node = reverseNode(head.next);
        // 展現順序 head 4 3 2 1

        // 第一輪:
        // 當前指向順序 4 -> 5 
        
        head.next.next = head; // 變成了 5 -> 4 可是4的指針仍然指向5 也就是雙向的
        // 因此 4 -> null 變成單向
        head.next = null;
        
        // node是最後一個元素 5 也就是逆轉後的 第一個元素
        return node;
    }複製代碼
相關文章
相關標籤/搜索