(链表)合并有序链表

本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问

题目:

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

题解

我们这里利用到了一个前哨节点,因为两个链表实际上是已经排好序了,所以我们只需要比较两个节点谁大谁小,找到小的接上去,然后那个接上去的指针后移一位。

实际代码如下

    // 创建一个哨兵节点
    prehead := &ListNode{}
    // 这个result用于存储最终结果
    result := prehead
    // 不断循环遍历,直达两个指针都为空
    for l1 != nil && l2 != nil {
        // 比较两个节点,找出小那个节点
        if l1.Val < l2.Val {
            // 哨兵节点的下一个值为小的那个
            prehead.Next = l1
            // l1的值向下切换
            l1 = l1.Next
        }else{
            // 这里说明l2才是小的那个
            prehead.Next = l2
            l2 = l2.Next
        }
        // 哨兵节点下移
        prehead = prehead.Next
    }
    // 如果一个节点为空另外的节点不为空的话我们就直接把下面的节点直接给接上去
    if l1 != nil {
        prehead.Next = l1
    }
    if l2 != nil {
        prehead.Next = l2
    }
    return result.Next
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值