leetcode 第19题 (删除列表中倒数第n个节点)

220 阅读1分钟
给定一个链表,删除倒数第n个节点,n为输入参数,始终有效



解法:(采用快慢指针法)


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

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        if not head:
            return
        
        first = head
        second = head
        size = 0
        
        while first.next:
            first = first.next
            size += 1
            if size > n:
                second = second.next
        
        if size + 1 == n: #删除链表节点时,总是指向前驱节点,所以此处 size要 加1后判断
            return head.next
        else:
            second.next = second.next.next
            return head


注:

当n值 等于 链表节点数时,直接将头节点删去