LeetCode 19. 删除链表的倒数第 N 个结点

发布时间 2023-05-06 15:27:17作者: 小星code

题目链接:LeetCode 19. 删除链表的倒数第 N 个结点

本题依旧采用双指针的解法,
首先快指针先走 n+1 步,然后快慢指针同时往后走。当快指针走到链表末尾时,慢指针所在的位置刚好是倒数第n-1个结点,
然后利用慢指针,删除倒数第n个结点
完整代码如下:

func removeNthFromEnd(head *ListNode, n int) *ListNode {
    // 双指针法
    // 快指针先走 n+1 步,然后快慢指针同时往后走。当快指针走到链表末尾时,慢指针所在的位置刚好是倒数第n-1个结点,
    // 此时删除第n个结点
    dumpy:=&ListNode{}
    dumpy.Next = head
    fast:=dumpy
    slow:=dumpy
    for n+1 > 0 && fast != nil {
        n--
        fast = fast.Next   //快指针向前走n+1步
    }
    
    for fast != nil {   //快慢指针同时向前走
         slow = slow.Next
         fast = fast.Next
       
    }
    slow.Next = slow.Next.Next   //删除倒数第n个结点
    return dumpy.Next 
}