鏈表刪除節(jié)點(diǎn)是一道經(jīng)典的面試題舷嗡,
主要解體的思路為雙指針,
指針a先運(yùn)動n次next,
然后b指針和a指針一起運(yùn)動官套,直到到達(dá)tail
這里主要需要關(guān)注幾點(diǎn)到corner case:
- 如果鏈表為空
- 如果刪除的是第一個節(jié)點(diǎn)
- 如果只有一個節(jié)點(diǎn)
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
# 為空
if not head:
return
# 只有一個節(jié)點(diǎn)
if not head.next:
return
del_pre = head
for i in range(n):
del_pre = del_pre.next
# 如果刪除的是第一個節(jié)點(diǎn)
if not del_pre:
head = head.next
return head
pre = head
while del_pre and del_pre.next:
pre = pre.next
del_pre = del_pre.next
last = pre.next.next
pre.next = last
return head