Leetcode - 19 删除链表的倒数第N个节点 python

版权声明:本文章为原创,未经许可不得转载 https://blog.csdn.net/weixin_41864878/article/details/91042588

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

示例:

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

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

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

用两个指针,第一个指针先走步,之后建立第二个指针,然后两个指针一起走,直到第一个指针走到末尾,此时第二个指针就在倒数第n-1的位置,把n-1的next和next.next连在一起就ok

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
        steps = 0
        node = head
        if not node or not node.next: return None #只有1个节点时也返回None
        while steps < n-1 and node:
            node = node.next
            steps+=1
        rem = head
        node = node.next # node再走一步
        if not node: #如果这时已经到了末尾,说明要删除的是头节点
            head = head.next
            return head
        while node.next:
            node = node.next
            rem = rem.next
        if n == 1: rem.next = None #如果n=1,说明要删除的是尾节点
        else: rem.next = rem.next.next
        return head     

猜你喜欢

转载自blog.csdn.net/weixin_41864878/article/details/91042588