【LeetCode】Remove Nth Node From End of List

Description

Remove Nth Node From End of List

Given a linked list, remove the nth node from the end of list and return its head.

Code

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def removeNthFromEnd(self, head, n):
        buffer = ListNode(0)
        buffer.next = head
        first = buffer
        second = buffer
        for i in range(n + 1): # first 和 second的间隔是n + 1, 加在两个结点之间的有n个结点
            second = second.next
        while second != None: # 停下的时候,first指在要被删除的结点
            first = first.next
            second = second.next
        first.next = first.next.next
        return buffer.next

Note

  1. 关于python中的赋值
        python中的变量名就像是指向对象的指针。比如上面代码中的buffer, first, second,都指向同一个对象,可以类比成贴在同一个对象上的三个标签。
        如果执行first = Listnode(1)的话,会让first指向一个新的对象,但是并不影响second和buffer指向原来的对象。
        但是如果执行fisrt.val = 1的话,那么就改变了buffer, first, second指向那对象。

  2. 思路
        在讨论区看到了一个不错的思路:用两个’指针’,保持着固定的间隔同时移动。当second移动到末尾时,first就正好指向要删除的结点的父节点。

  3. 边界条件
        为了不处理边界条件,可以先加一个头结点buffer,buffer的next是真正的结果的第一个结点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值