Leetcode-19. 删除链表的倒数第 N 个结点
这里采用 计算链表长度法:
-
第一次遍历链表,得到链表长度
length
。 -
计算要删除节点的正序位置:
length - n + 1
。 -
用一个虚拟头节点
dummy
来统一处理删除头结点的情况。 -
第二次遍历,将要删除的节点跳过,即让前驱节点指向要删除节点的下一个节点。
解题过程
-
遍历一次链表,用
length
记录节点总数。 -
计算要删除的节点前一个节点的位置,也就是
length - n
。 -
使用一个 dummy 节点 指向
head
,用tail
指针遍历到该位置。 -
直接跳过目标节点:
tail.next = tail.next.next
。 -
返回
dummy.next
作为新链表头。
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution:def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:num=headi=0while num:i+=1num=num.nextp=headdummy=ListNode()tail=dummyfor j in range(i-n):tail.next=pp=p.nexttail=tail.nexttemp=p.nexttail.next=tempreturn dummy.next