19.删除链表倒数第k个节点
删除链表倒数第k个节点
题目描述:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
进阶:你能尝试使用一趟扫描实现吗?
思路:
快慢指针,先快指针走n步,再快慢指针一起走,快指针下一个是nil的时候慢指针刚好是倒数第n个
代码:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
if head == nil{
return head
}
fastNode,slowNdoe := head,head
for i:=0;i<n;i++{
fastNode = fastNode.Next;
}
if fastNode == nil{
return head.Next
}
for fastNode.Next != nil {
fastNode = fastNode.Next
slowNdoe = slowNdoe.Next
}
slowNdoe.Next = slowNdoe.Next.Next
return head
}
代码效率:
执行用时:0 ms, 在所有 Go 提交中击败了100.00%的用户
内存消耗:2.2 MB, 在所有 Go 提交中击败了100.00%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!