【力扣 095】2095. 刪除連結串列的中間節點
阿新 • • 發佈:2022-05-31
2095. 刪除連結串列的中間節點
給你一個連結串列的頭節點 head 。刪除 連結串列的 中間節點 ,並返回修改後的連結串列的頭節點 head 。
長度為 n 連結串列的中間節點是從頭數起第 ⌊n / 2⌋ 個節點(下標從 0 開始),其中 ⌊x⌋ 表示小於或等於 x 的最大整數。
對於 n = 1、2、3、4 和 5 的情況,中間節點的下標分別是 0、1、1、2 和 2 。
示例 1:
輸入:head = [1,3,4,7,1,2,6]
輸出:[1,3,4,1,2,6]
解釋:
上圖表示給出的連結串列。節點的下標分別標註在每個節點的下方。
由於 n = 7 ,值為 7 的節點 3 是中間節點,用紅色標註。
返回結果為移除節點後的新連結串列。
示例 2:
輸入:head = [1,2,3,4]
輸出:[1,2,4]
解釋:
上圖表示給出的連結串列。
對於 n = 4 ,值為 3 的節點 2 是中間節點,用紅色標註。
示例 3:
輸入:head = [2,1]
輸出:[2]
解釋:
上圖表示給出的連結串列。
對於 n = 2 ,值為 1 的節點 1 是中間節點,用紅色標註。
值為 2 的節點 0 是移除節點 1 後剩下的唯一一個節點。
來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/delete-the-middle-node-of-a-linked-list
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
程式碼實現:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* deleteMiddle(ListNode* head) { if(!head) return head; if(!head->next) return head->next; ListNode *pre, *slow, *fast; pre = slow = fast = head; while(fast && fast->next) { fast = fast->next->next; pre = slow; slow = slow->next; } pre->next = pre->next->next; return head; } };