题目:(删除链表的倒数第N个结点)给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:
输入:head = [1], n = 1 输出:[] 示例 3:
输入:head = [1,2], n = 1 输出:[1]
提示:
链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz
程序说明: 1、程序使用了双指针。先添加一个哑结点,初始值为NULL,为了避免处理头节点为空的边界问题的作用,接着使一个指针 low 指向哑节点,一个 high 指向哑节点的下一个节点,也就是头节点。先固定 low 节点不动,使high 节点移动 n 次,以保证两节点之间的距离差为 n ,接着就可以两节点一起向后移动了,直到 high 移至链表尾部,也就是值为null时,即可删除掉 low 的下一个节点了。(具体如图)
全部代码:
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
low = dummy.next
high = dummy
for i in range(1,n+1):
low = low.next
while low is not None:
low = low.next
high = high.next
high.next = high.next.next
return dummy.next
题目来源:力扣(LeetCode)
|