博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go合并两个有序列表
阅读量:4099 次
发布时间:2019-05-25

本文共 1133 字,大约阅读时间需要 3 分钟。

题目:

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

思路:

1、如果给定的两条链表中有一条为空,返回另一条即可

2、若两条链表都不为空,则在两条链表中选择较小的节点作为head,被选中的较小节点所在链表的第二个节点便成了二当家带领这条链表

3、二当家带领着这条链表与另一条链表进行比较,始终选择较小的节点连在head后面。

4、连接好后在返回head时发现,此时的head是合成后的链表的最后一个节点,而不是头结点。解决方法是,在第二部选定头节点时,同时将这个头结点多赋予一个变量,同时保持这个标量不动,它始终保存的是头结点,这样到最后返回他就好了,因为存的都是地址啊,与变量名无关。

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */// ListNode 是链接节点type ListNode struct { Val  int Next *ListNode}func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { // 有一条链为nil,直接返回另一条链 if l1 == nil {  return l2 } if l2 == nil {  return l1 } // 此时,两条链都不为nil,可以直接使用l.Val,而不用担心panic // 在l1和l2之间,选择较小的节点作为head,并设置好node var head, node *ListNode if l1.Val < l2.Val {  head = l1  node = l1  l1 = l1.Next } else {  head = l2  node = l2  l2 = l2.Next } // 循环比较l1和l2的值,始终选择较小的值连上node for l1 != nil && l2 != nil {  if l1.Val < l2.Val {   node.Next = l1   l1 = l1.Next  } else {   node.Next = l2   l2 = l2.Next  }  // 有了这一步,head才是一个完整的链  node = node.Next } if l1 != nil {  // 连上l1剩余的链  node.Next = l1 } if l2 != nil {  // 连上l2剩余的链  node.Next = l2 } return head}

 

转载地址:http://lzwsi.baihongyu.com/

你可能感兴趣的文章
Spring Boot 集成 Ehcache 缓存,三步搞定!
查看>>
二叉搜索树的这些你都会了吗?
查看>>
Spring Boot 2.0 迁移指南
查看>>
最近学到的java限流知识
查看>>
面试加分项-HashMap源码中这些常量的设计目的
查看>>
面试官:你能谈谈Dubbo SPI扩展原理吗?
查看>>
讲真,下次打死我也不敢随便改serialVersionUID了
查看>>
Spring、Spring MVC、MyBatis 整合文件配置详解
查看>>
一份还热乎的蚂蚁金服面经(已拿Offer)!附答案
查看>>
设计撑百万并发的数据库架构
查看>>
Java集合必会14问(精选面试题整理)
查看>>
这样讲 SpringBoot 自动配置原理,你应该能明白了吧
查看>>
消灭 Java 代码的“坏味道”
查看>>
这代码写的,狗屎一样 (下)
查看>>
到底如何设置 Java 线程池的大小?
查看>>
如何优雅的导出Excel
查看>>
Redis最常被问到知识点总结
查看>>
IntelliJ IDEA 快捷键终极大全,速度收藏
查看>>
GoF之装饰模式遇见王者荣耀、刺激战场
查看>>
为什么ConcurrentHashMap的读操作不需要加锁?
查看>>