给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
解题思路
先将指针q
移动n+1
p q
h -> 1 -> 2 -> 3 -> 4 -> 5 -> null
然后同时移动q
和p
,直到q==null
p q
h -> 1 -> 2 -> 3 -> 4 -> 5 -> null
此时p.next
指向的位置,就是我们要删除的元素的位置。我们直接p.next = p.next.next
即可。
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
h = ListNode(-1)
h.next = head
p, q = h, h
for _ in range(n + 1):
q = q.next
while q != None:
p = p.next
q = q.next
p.next = p.next.next
return h.next
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!