一個很經典的題目 在各種題庫中出現頻率也很高 因此這道題也很受面試官青睞
在第一次秋招第一次跑宣講會的時候 作爲小白板的我筆試竟然過了(可能是卷面相對來說工整一點吧) 第二天被面試官問道 “鏈表操作時需要注意什麼” 那麼 我們就談談這道題該注意什麼:
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;
}
}