代码随想录删除链表的倒数第N个节点

71 阅读1分钟

image.png

问题分析

在这里拆分成两个小问题:

    • 删除链表节点 删除一个链表的结点,与三个节点有关系

image.png

pre.next=pre.next.next

    • 结点位置是倒数第N个

当然可以遍历一遍链表得出链表总长度,然后找第n-1个节点然后进行删除。

这里更加推荐一次遍历使用双指针的思想,快慢指针,快指针始终比慢指针快n+1个节点。 当快指针为None时,此时慢指针在倒数第n+1个节点的位置,此时调用删除链表即可

代码

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: Optional[ListNode]
        :type n: int
        :rtype: Optional[ListNode]
        """
        head_hummy=ListNode(next=head)
        slow,fast=dead_hummy,head_hummy
        while (n+1)!=0:
            fast=fast.next
            n-=1
        while fast!=None:
            fast=fast.next
            slow=slow.next
        slow.next=slow.next.next
        return head_hummy.next

期待可以给您提供帮助,以及小红心。