跳到主要内容

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

题目描述

原题链接

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

使用快慢指针就能解了,快指针先走 n 步,然后快慢指针一起走,当快指针走到尾部时,慢指针指向的就是倒数第 n 个节点

/*
* @lc app=leetcode.cn id=19 lang=golang
*
* [19] 删除链表的倒数第 N 个结点
*/

// @lc code=start
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
// 使用快慢指针,快指针先走n步,然后快慢指针一起走,当快指针走到尾部时,慢指针指向的就是倒数第n个节点

// 1. 创建哑节点
dummy := &ListNode{Val: 0, Next: head}
// 2. 快慢指针
fast, slow := head, dummy
// 3. 快指针先走n步
for i := 0; i < n; i++ {
fast = fast.Next
}

// 4. 快慢指针一起走
for fast != nil {
fast = fast.Next
slow = slow.Next
}

// 5. 删除倒数第n个节点
slow.Next = slow.Next.Next

return dummy.Next
}

// @lc code=end