这里采用 计算链表长度法:
第一次遍历链表,得到链表长度
length
。计算要删除节点的正序位置:
length - n + 1
。用一个虚拟头节点
dummy
来统一处理删除头结点的情况。第二次遍历,将要删除的节点跳过,即让前驱节点指向要删除节点的下一个节点。
解题过程
遍历一次链表,用
length
记录节点总数。计算要删除的节点前一个节点的位置,也就是
length - n
。使用一个 dummy 节点 指向
head
,用tail
指针遍历到该位置。直接跳过目标节点:
tail.next = tail.next.next
。返回
dummy.next
作为新链表头。
1 | # Definition for singly-linked list. |