题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
解题思路
链表问题,用指针就对了。
(1)可以设置两个指针,一个slow、一个fast,fast指针以第n个元素的位置作为起点,slow指针以第一个元素的位置作为起点
(2)从当前位置,fast指针和slow指针向右移动直到fast指针指向链表最后一个元素,此时slow指向倒数第n+1个元素(fast-slow=n)
(3)删除倒数第n个元素
完整代码
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
Node = ListNode(None)
Node.next = head
first,slow = Node,Node
for i in range(n):
first = first.next
while first.next != None:
first = first.next
slow = slow.next
slow.next = slow.next.next
return Node.next
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list