经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
合并两个有序链表的golang实现
来源:cnblogs  作者:timliudream  时间:2018/12/19 9:07:44  对本文有异议

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

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

注意:

  • 两个链表都是有序的
  • 如果某个链表为空,那就直接返回另外一个有序链表
  1. //如果有一条链是nil,直接返回另外一条链
  2. if l1 == nil {
  3. return l2
  4. }
  5. if l2 == nil {
  6. return l1
  7. }

然后我们就要比较两个链表的节点的顺序了

  • 首先,我们定义一个result指针
  • 比较两个链表的第一个元素哪个比较小
  • result指向小的那个链表
先来看一张图

核心代码:

  1. func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
  2. //如果有一条链是nil,直接返回另外一条链
  3. if l1 == nil {
  4. return l2
  5. }
  6. if l2 == nil {
  7. return l1
  8. }
  9. // 定义一个结果节点
  10. var res *ListNode
  11. // 当l1节点的值大于l2节点的值,那么res指向l2的节点,从l2开始遍历,反之从l1开始
  12. if l1.Val >= l2.Val {
  13. res = l2
  14. res.Next = mergeTwoLists(l1, l2.Next)
  15. } else {
  16. res = l1
  17. res.Next = mergeTwoLists(l1.Next, l2)
  18. }
  19. return res
  20. }

使用递归,不断去找两个链表中比较小的元素,然后result接上那个元素

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号