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

 

题目链接

啊感觉这个题做过的,然后自己写了一下,倒是过了示例,但是提交之后发现有特殊情况没有考虑,比如说在链表中只有一个元素的时候要删除倒数第一个节点,我的实现就会有问题,然后看了一下两年前提交的答案,发现使用的dummyt节点是在head之前的节点而非我这样将dummy设成head。另外,在这样设置dummy后,在提前走n步时我们要改成提前走n+1步。这个算法的时间复杂度是O(N),空间复杂度是O(1)。

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

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy = ListNode(0, next=head)
        left, right = dummy, dummy
        for _ in range(n+1):
            right = right.next
        while right is not None:
            right = right.next
            left = left.next
        left.next = left.next.next
        return dummy.next