python 删除链表中倒数第N个节点
生活随笔
收集整理的這篇文章主要介紹了
python 删除链表中倒数第N个节点
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| 刪除鏈表中倒數(shù)第N個節(jié)點
給你一個鏈表,刪除鏈表的倒數(shù)第 n 個結(jié)點,并且返回鏈表的頭結(jié)點。
輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
示例 2:
輸入:head = [1], n = 1
輸出:[]
示例 3:
輸入:head = [1,2], n = 1
輸出:[1]
| 題解
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:"""解題思路一:1.找規(guī)律可得,倒數(shù)第n個元素為正數(shù)第s個元素 s = count - n +12.定義新的頭指針,循環(huán)遍歷添加到新的頭指針,當start == n 時,跳過3.返回新的頭指針解題思路二:1.定義快慢指針 讓fast指針先移動n步,然后fast 和 slow 同時后移 直道fast.next 為空2.如果connt == n 即要刪除的元素為第一個元素,可作為特殊情況處理"""def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:# 解題思路一cur = head# 計算鏈表的長度count = 0while cur:count += 1cur = cur.next# 倒數(shù)第n個元素為正數(shù)第s個元素 s = count - n +1s = count - n + 1# 定義新的指針點并且添加虛擬頭節(jié)點node = ListNode()new_head = nodetail = nodestart = 0c = headwhile c:start += 1if start == s:c = c.nextcontinueelse:tail.next = ctail = cc = c.nexttail.next = None # 因為tail指針一直指向尾節(jié)點,有可能尾節(jié)點后面是要刪除的節(jié)點,索引把尾節(jié)點后面的節(jié)點斷開return new_head.next # 返回新的頭指針# 解法二# 定義快慢指針 讓fast指針先移動n步,然后fast 和 slow 同時后移 直道fast.next 為空fast = headslow = head# 定義新的頭指針和虛擬頭節(jié)點node = ListNode()new_head = nodetail = nodecount = 0while fast and slow:if count >= n:fast = fast.nexttail.next = slowtail = slowslow = slow.nextelse:fast = fast.nextcount += 1# 如果connt == n 即要刪除的元素為第一個元素,可作為特殊情況處理if count == n: return head.next# 跳過count == n 的節(jié)點tail.next = tail.next.next# 返回新的頭指針return new_head.next 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的python 删除链表中倒数第N个节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 链表中倒数第k个节点
- 下一篇: python 相交链表