Leetcode——19. 删除链表的倒数第N个节点

LeetCode 专栏收录该内容
65 篇文章 0 订阅

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

思路:

nodeList相关的,需要删除一个节点,就应该要找到前一个节点,但是头结点又没有前一个节点,又是dummyHead大法,只不过这里需要用到双指针。
在这里插入图片描述
因为都是倒着来的,所以,p和q之间隔着两个,距离是固定的
在这里插入图片描述
将p,q指针向前挪,直到p挪到虚拟的头结点位置,n的范围内,q指向下一个节点,q下一个节点不为空,就让p,q依次往后挪。

然后删掉p的下一个节点的值即可,注意最后返回的是dummyHead.next,因为可能删的就是head

class Solution:
    def removeNthFromEnd(self, head: 'ListNode', n: 'int') -> 'ListNode':
        dummyHead = ListNode(-1)
        dummyHead.next = head
        p = dummyHead
        q = dummyHead
        
        for i in range(n):
            q = q.next
        while q.next:
            q = q.next
            p = p.next
            
        p.next = p.next.next
        return dummyHead.next
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值