- 题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
- 示例
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
- 解决思路一
官方题解中的第二种思路。首先使用哑节点,为了简化特殊情况(链表中只有一个节点或需要删除头节点),这两种情况下如果没有哑节点,返回值是空;其次使用两个指针fast和slow,fast指针先向前移动n+1步,和slow间隔n;然后fast和slow同时向后移动,直到fast指针指向了最后一个节点null,此时slow指向的节点即为要删除的节点,就是从倒数第一个节点往前数的第n个节点,那么我们需要做的就是让slow指向它的下下个节点,即可成功删除要求的节点。
- 代码一
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
#增加哑节点
#为了防止要删除头节点或者链表中只有一个节点的情况
front = ListNode(0)