LeetCode中等题之删除链表的中间节点
題目
給你一個鏈表的頭節(jié)點 head 。刪除 鏈表的 中間節(jié)點 ,并返回修改后的鏈表的頭節(jié)點 head 。
長度為 n 鏈表的中間節(jié)點是從頭數(shù)起第 ?n / 2? 個節(jié)點(下標從 0 開始),其中 ?x? 表示小于或等于 x 的最大整數(shù)。
對于 n = 1、2、3、4 和 5 的情況,中間節(jié)點的下標分別是 0、1、1、2 和 2 。
示例 1:
輸入:head = [1,3,4,7,1,2,6]
輸出:[1,3,4,1,2,6]
解釋:
上圖表示給出的鏈表。節(jié)點的下標分別標注在每個節(jié)點的下方。
由于 n = 7 ,值為 7 的節(jié)點 3 是中間節(jié)點,用紅色標注。
返回結(jié)果為移除節(jié)點后的新鏈表。
示例 2:
輸入:head = [1,2,3,4]
輸出:[1,2,4]
解釋:
上圖表示給出的鏈表。
對于 n = 4 ,值為 3 的節(jié)點 2 是中間節(jié)點,用紅色標注。
示例 3:
輸入:head = [2,1]
輸出:[2]
解釋:
上圖表示給出的鏈表。
對于 n = 2 ,值為 1 的節(jié)點 1 是中間節(jié)點,用紅色標注。
值為 2 的節(jié)點 0 是移除節(jié)點 1 后剩下的唯一一個節(jié)點。
提示:
鏈表中節(jié)點的數(shù)目在范圍 [1, 10^5] 內(nèi)
1 <= Node.val <= 10^5
來源:力扣(LeetCode)
解題思路
??這個題是典型的快慢指針題,只需要保持三個指針即可;一個快指針一個慢指針,還有一個慢指針的前驅(qū),當快指針探底的時候,就是慢指針走到中間的時候。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:def deleteMiddle(self, head: Optional[ListNode]) -> Optional[ListNode]:if head.next==None:return Nonefast=headslow=headwhile True:try:fast=fast.next.nextexcept:breakp=slowslow=slow.nextp.next=p.next.nextreturn head
總結(jié)
以上是生活随笔為你收集整理的LeetCode中等题之删除链表的中间节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode中等题之重排数字的最小值
- 下一篇: LeetCode简单题之合并两个链表