题目

思想

找到 倒数第 n+1 个节点,然后删除即可。需要特判一下删除的是否是头结点。

代码

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
length = 0
tmp = head
# 求出链表长度
while(tmp):
tmp = tmp.next
length+=1
# print(length)

# 倒数第n个节点=> 正数第 length-n+1, 所以遍历到第 length-n 个节点处即可删除
cnt = 1
tmp = head
res = None # 返回的节点
if (length -n ) == 0: # 删除头结点
return head.next
while(tmp and cnt < length-n):
tmp = tmp.next
cnt+=1
# print(tmp.val)

# 此时
invalid_node = tmp.next
tmp.next = tmp.next.next
del invalid_node
return