链表专题 - leetcode19. Remove Nth Node From End of List

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a786150017/article/details/82956109

19. Remove Nth Node From End of List

题目描述

移除链表的倒数第n个结点

例子

Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.

解法
[边界] - n的取值范围是1-链表长度,边界为n=1和n=链表长度
[思路] - 要求移除倒数第n个,考虑双指针:指针1先移动n+1步,指针2再移动(指针1指向None时,指针2刚好指向倒数第n+1个结点)
[改进] - 对于边界n=链表长度时,指针1移动n+1会报错。在开头定义一个dunmmy结点

解法1

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
        p = head
        for _ in range(n+1):
            if not p:    # 边界-正数第一个结点
                return head.next
            p = p.next
        
        q = head
        while p:
            p = p.next
            q = q.next
        q.next = q.next.next
        
        return head

改进: 开头定义一个dummy结点

class Solution(object):
    def removeNthFromEnd(self, head, n):
        dummy = ListNode(-1)
        dummy.next = head
        
        p = dummy
        for _ in range(n+1):
            p = p.next
        
        q = dummy
        while p:
            p = p.next
            q = q.next
        q.next = q.next.next
        
        return dummy.next

猜你喜欢

转载自blog.csdn.net/a786150017/article/details/82956109