19. 刪除鏈表的倒數第 N 個節(jié)點

題目描述

給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。

進階:你能嘗試使用一趟掃描實現嗎?

示例 1:


image.png

輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
示例 2:

輸入:head = [1], n = 1
輸出:[]
示例 3:

輸入:head = [1,2], n = 1
輸出:[1]

提示:

鏈表中結點的數目為 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

題解

使用快慢指針的思路解題,快指針先走n步,然后再快慢指針同步走,直到快指針走到最后一個節(jié)點位置,則慢指針當前所處的位置即為要刪除節(jié)點的前一個節(jié)點。

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast = head;
        ListNode slow = head;
        // 快指針先走n步
        while (n-- > 0) {
            fast = fast.next;
        }
        // 如果快指針已經到底,則表示要刪除第一個節(jié)點,則直接返回頭結點的下一個節(jié)點
        if (fast == null) {
            return head.next;
        }
        // 再快指針和慢指針同步走,直到快指針到最后一個節(jié)點,則slow當前所在的位置即為要刪除節(jié)點的前一個節(jié)點
        while (fast.next != null) {
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return head;
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容