【LeetCode】19. Remove Nth Node From End of List 解题报告(Python)

127 篇文章 2 订阅
102 篇文章 2 订阅

题目分析:

给定链表,从链表末尾删除倒数第n个节点并返回新的头部。由于题目要求遍历一次完成操作所以不可能找到长度在删除。借鉴网上的一种做法,设置两个指针。前面的指针走n个元素,后面的指针再走。这样前面的走到最后时后面的指针刚好指到要删除的前一个元素。

代码说明:
1、前面元素走n次
for i in range(n):
begin = begin.next
2、如果前面指针走完是空了,那么要删除的正是第一个元素
if begin is None: return head.next
3、两个指针一起走,这样前面的走到最后时后面的指针刚好指到要删除的前一个元素。
while(begin.next):
begin = begin.next
end = end.next
4、前面的走到最后时后面的指针刚好指到要删除的前一个元素,所以直接让那个位置跳过一个元素。
end.next = end.next.next
测试代码(非提交代码,提交代码在下面)

def print_ListNode(head):
    while (True):
        print(head.val)
        if head.next is not None:
            head = head.next
        else:
            break

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

class Solution:
    def removeNthFromEnd(self, head, n):
        begin, end = head, head
        for i in range(n):
            begin = begin.next
        if begin is None:   return head.next
        while(begin.next):
            begin = begin.next
            end = end.next
        end.next = end.next.next
        return head

list_node1 = ListNode(1)
list_node2 = ListNode(2)
list_node3 = ListNode(3)
list_node4 = ListNode(4)
list_node5 = ListNode(5)
list_node1.next = list_node2
list_node2.next = list_node3
list_node3.next = list_node4
list_node4.next = list_node5

print_ListNode(Solution().removeNthFromEnd(list_node1, 2))

提交代码

class Solution:
    def removeNthFromEnd(self, head, n):
        begin, end = head, head
        for i in range(n):
            begin = begin.next
        if begin is None:   return head.next
        while(begin.next):
            begin = begin.next
            end = end.next
        end.next = end.next.next
        return head

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值