iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
佛心分享-刷題不只是刷題

Java刷題A:Leetcode Top 100 Liked系列 第 20

Day20 Linked Lists鏈結串列-題目1:19. Remove Nth Node From End of List

  • 分享至 

  • xImage
  •  

原文題目
Given the head of a linked list, remove the nth node from the end of the list and return its head.

題目摘要

  1. 給定一個鏈結串列 head 和一個整數 n,移除串列倒數第 n 個節點,並回傳修改後的鏈結串列。

Example 1:
https://ithelp.ithome.com.tw/upload/images/20241004/20168780MeCIVDGcZg.jpg

Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1
Output: []

Example 3:

Input: head = [1,2], n = 1
Output: [1]

解題思路

  1. 計算鏈結串列的長度
    • 透過遍歷鏈結串列,計算節點的總數,並將該數值儲存在變數 length 中。這步驟用來確定倒數第 n 個節點在整個鏈表中的位置。
  2. 處理刪除頭節點的特殊情況
    • 如果要刪除的是頭節點(即鏈結串列的總長度等於 n),直接返回頭節點的下一個節點 head.next,表示刪除頭節點。
  3. 重新遍歷到目標節點的前一個節點
    • current 重新指向鏈表的頭節點,再次遍歷,直到倒數第 n 個節點的前一個節點。這樣可以準確定位到需要刪除的節點。
  4. 刪除目標節點
    • 將指向要刪除的節點的指標更新為其下一個節點 current.next = current.next.next,即跳過目標節點,從而達到刪除的效果。
  5. 回傳修改後的鏈結串列
    • 完成刪除操作後回傳修改後的鏈結串列。

程式碼

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int length = 0; //用來計算鏈結串列的總長度
        ListNode current = head; //設置當前指標指向頭節點

        //計算整個鏈結串列的長度
        while (current != null) {
            length++;
            current = current.next;
        }
        
        //如果要刪除的是頭節點,即鏈結串列的長度剛好等於 n
        if (length == n) {
            return head.next; //回傳頭節點的下一個節點,這樣就等於刪除頭節點
        }

        //重新初始化當前指標指向頭節點,準備再次遍歷
        current = head;
        //遍歷到刪除節點的前一個節點
        for (int i = 1; i < length - n; i++) {
            current = current.next;
        }
        
        current.next = current.next.next;//刪除目標節點

        return head; //返回鏈結串列的頭節點
    }
}

結論
在解這道題時,我透過第一次完整的遍歷來獲取鏈結串列的長度,第二次遍歷找到要刪除的節點。除此之外,還要注意邊界情況的處理,例如鏈結只有一個節點或刪除的是倒數第一個節點的情況。藉由這題練習加深了我對單向鏈結串列操作的理解及操作。


上一篇
Day19 Linked Lists鏈結串列 - 概念介紹(下)
下一篇
Day21 Linked Lists鏈結串列-題目2:24. Swap Nodes in Pairs
系列文
Java刷題A:Leetcode Top 100 Liked26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言