三维网站搭建教程直播网站app开发
这里采用 计算链表长度法:
-
第一次遍历链表,得到链表长度
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
