鏈表逆置(Java實現)

一個很經典的題目 在各種題庫中出現頻率也很高 因此這道題也很受面試官青睞

在第一次秋招第一次跑宣講會的時候 作爲小白板的我筆試竟然過了(可能是卷面相對來說工整一點吧) 第二天被面試官問道 “鏈表操作時需要注意什麼”  那麼  我們就談談這道題該注意什麼:

1.鏈表操作最重要的一步就是判空 在任何時候都不要忘了空鏈表的情況

2.要記住頭結點 防止丟失

3.注意每個引用的更新

4.要注意是否需要返回值 需要的話 考慮該返回什麼

該題解題思路:

1.鏈表爲空 或者只有一個節點的時候不需要操作 直接返回就可以

2.需要逆置的時候  我們需要先建立新的引用  保存頭結點

3.建立兩個引用 分別指向當前結點和它的前一個位置

4.當前位置非空的時候 進行逆置 

創建一個引用 指向當前位置的下一個位置 當下一個位置爲空的時候 說明已經逆置完了 將當前位置就可以設置爲頭結點

而逆置的核心操作就是交換當前位置與前一個位置之間的指向 交換之後要記得更新引用

5.在最後返回頭結點即可

public class ListNode {
    int val;
    ListNode next;

    ListNode(int v) {
        this.val = v;
    }
}

public class Solution {
    //鏈表翻轉
    public ListNode reserveList(ListNode head) {
        //判空
        if (head == null) {
            return null;
        }
        //只有一個節點的情況
        if (head.next == null) {
            return head;
        }
        //記錄當前位置和它的前一個位置
        ListNode cur = head;
        ListNode prev = null;
        ListNode newHead = null;//用來保存頭結點
        while (cur != null) {
            ListNode next = cur.next;
            if (next == null) {
                newHead = cur;
            }
            //逆置 核心操作
            cur.next = prev;
            //更新
            prev = cur;
            cur = next;
        }
        return newHead;
    }
}

 

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