LeetCode刷题之路:19. 删除链表的倒数第 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

#最直观的思路
利用双指针法,直接在原链表上进行修改,既省时又省空间

首先添加虚假头指针
随后利用双指针,先让cur指针前进n个节点,
这样其和end节点之间变相差n个节点
然后让cur和end节点同时移动,直至cur节点为None,代表已经到了链表的末尾
同时,用pre来记录end节点的前节点,为了方便删除end节点
最后,直接将pre的下一节点指向end的下一节点即可
这样便达到了删除end节点的效果


class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy = ListNode(-1, head)
        cur = dummy
        end = dummy
        for _ in range(n):
            cur = cur.next
        while cur != None:
            cur = cur.next
            pre = end
            end = end.next
        pre.next = end.next
        return dummy.next

            

猜你喜欢

转载自blog.csdn.net/as812252319/article/details/115423725