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 协议 ,转载请注明出处!