給定單鏈表中非尾節點的引用,要求在 O(1) 時間內刪除該節點。無法訪問頭節點,也無法訪問前驅節點。
因為無法修改前驅的 next,但可以修改當前節點的值與 next。將下一個節點的值複製到當前節點,然後將當前節點的 next 指向下下個節點。邏輯上相當於「刪除了下一個節點,並把當前節點偽裝成下一個」。
public class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
node.next 一定存在。node.next 指針,修改完後 delete 該指針。這是一道腦筋急轉彎題,核心在於「無法修改前驅,卻能修改自身與後繼」。面試中直接寫出兩行代碼並解釋原理即可,展示對鏈表指針操作的靈活理解。