您的位置:首页 > Web前端 > Node.js

【LeetCode】Remove Nth Node From End of List

2017-02-03 11:24 316 查看

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

关于python中的赋值

python中的变量名就像是指向对象的指针。比如上面代码中的buffer, first, second,都指向同一个对象,可以类比成贴在同一个对象上的三个标签。

如果执行first = Listnode(1)的话,会让first指向一个新的对象,但是并不影响second和buffer指向原来的对象。

但是如果执行fisrt.val = 1的话,那么就改变了buffer, first, second指向那对象。

思路

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

边界条件

为了不处理边界条件,可以先加一个头结点buffer,buffer的next是真正的结果的第一个结点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode