LeetCode:19. Remove Nth Node From End of List - Python

问题描述:

删除链表的倒数第N个节点

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

示例:

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

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

说明:给定的 n 保证是有效的。 进阶你能尝试使用一趟扫描实现吗?

问题分析:

简单直接给出答案。
(1)设置两个指针,一个在前,先走n步,然后两个指针同时向前走,直到第一个指针走到头。
(2)那么现在,第二个指针,就是前面就是要删除的结点。

Python3实现:

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

class Solution:
    def removeNthFromEnd(self, head, n):
        second = fist = head
        for i in range(n):  # 第一个指针先走 n 步
            fist = fist.next

        if fist == None:  # 如果现在第一个指针已经到头了,那么第一个结点就是要删除的结点。
            return second.next

        while fist.next:  # 然后同时走,直到第一个指针走到头
            fist = fist.next
            second = second.next
        second.next = second.next.next  # 删除相应的结点
        return head
欢迎指正哦。

猜你喜欢

转载自blog.csdn.net/xx_123_1_rj/article/details/80987974