力扣算法学习计划打卡:第五天

876链表的中间结点,19删除链表的倒数第N个节点

链表的中间结点

在这里插入图片描述
用两个指针 slow 与 fast 一起遍历链表。slow 一次走一步,fast 一次走两步。那么当 fast 到达链表的末尾时,slow 必然位于中间。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func middleNode(head *ListNode) *ListNode {
    var slow,fast *ListNode = head,head
    for fast!=nil&&fast.Next!=nil {
        slow=slow.Next
        fast=fast.Next.Next
    }
    return slow
}

删除链表的倒数第N个节点

在这里插入图片描述
在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的 next \textit{next} next指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。

由于我们需要找到倒数第 n n n个节点,因此我们可以使用两个指针 first \textit{first} first second \textit{second} second 同时对链表进行遍历,并且 first \textit{first} first second \textit{second} second超前 n n n个节点。当 first \textit{first} first遍历到链表的末尾时, second \textit{second} second就恰好处于倒数第 n n n个节点。

func removeNthFromEnd(head *ListNode, n int) *ListNode {
    dummy := &ListNode{0, head}
    first, second := head, dummy
    for i := 0; i < n; i++ {
        first = first.Next
    }
    for ; first != nil; first = first.Next {
        second = second.Next
    }
    second.Next = second.Next.Next
    return dummy.Next
}

作者:LeetCode-Solution
来源:力扣(LeetCode
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值