【Leet-Code】19. 删除链表的倒数第N个节点

【Leet-Code】19. 删除链表的倒数第N个节点_第1张图片

 

【题目解析】


采取双重遍历肯定是可以解决问题的,但题目要求我们一次遍历解决问题,那我们的思路得发散一下。

我们可以设想假设设定了双指针 slow 和 fast 的话,当 fast 指向末尾的 NULL,slow 与 fast 之间相隔的元素个数为 n 时,那么删除掉 slow 的下一个指针就完成了要求。

  • 设置虚拟节点 result_ListNode 指向 head;
  • 设定双指针 slow 和 fast ,初始都指向虚拟节点 result_ListNode;
  • 移动 fast ,直到 slow 与 fast 之间相隔的元素个数为 n;
  • 同时移动 slow 与 fast ,直到 fast 指向的为 NULL;
  • 将 slow 的下一个节点指向下下个节点;
# 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:
        result_ListNode = ListNode(0)
        result_ListNode.next = head 

        fast, slow = result_ListNode, result_ListNode

        for i in range(n):
            fast = fast.next

        while fast.next:
            slow = slow.next
            fast = fast.next 

        slow.next = slow.next.next

        return result_ListNode.next

 

你可能感兴趣的:(LeetCode)