代码随想录算法训练营第四天

24 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思考:主要是看了题解才搞清楚怎么做的,先设置一个dummyNode指向head,原始顺序为dummyNode->node1->node2,要变换成dummyNode->node2->node1,

cur := dummyNode
cur.Next = node2
node1.Next = node2.Next
node2.Next = node1

然后cur节点向后走两步。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func swapPairs(head *ListNode) *ListNode {
    dummy := &ListNode{Next:head}
    cur := dummy 
    for cur.Next != nil && cur.Next.Next != nil{
        node1 := cur.Next
        node2 := cur.Next.Next

        cur.Next = node2
        node1.Next = node2.Next
        node2.Next = node1

        cur = cur.Next.Next
    }
    return dummy.Next
}

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

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

思考:之前做过这题,使用快慢指针,快指针先走n+1步,然后快慢指针一起向后走,当快指针指向nil的时候,删除慢指针后面的那个节点即可。

func removeNthFromEnd(head *ListNode, n int) *ListNode {
    dummyNode := &ListNode{Next:head}
    slow := dummyNode
    fast := dummyNode
    // for i :=0; i<n+1; i++{
    //     fast = fast.Next
    // }
    i := 0
    for fast != nil {
        fast = fast.Next
        if i > n {
            slow = slow.Next
        }
        i++
    }
    slow.Next = slow.Next.Next
    return dummyNode.Next
}

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

思考:直接参考的答案,两个链表对齐后端,即长的链表先走到剩下长度和短的链表长度一致的地方,然后一一进行比对。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    cur1, cur2 := headA, headB
    len1, len2 := 0, 0
    for cur1 != nil{
        cur1 = cur1.Next
        len1++
    }
    for cur2 != nil {
        cur2 = cur2.Next
        len2++
    }
    var step int
    var p1, p2 *ListNode
    if len2 > len1{
        step = len2 - len1
        p1, p2 = headB, headA
    }else{
        step = len1 - len2
        p1, p2 = headA, headB
    }
    for i:=0; i< step; i++{
        p1 = p1.Next
    }
    for p2 != nil{
        if p1 == p2 {
            return p1
        }
        p1 = p1.Next
        p2 = p2.Next
    }
    return nil
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值