当前位置:   article > 正文

Golang | Leetcode Golang题解之第23题合并K个升序链表

Golang | Leetcode Golang题解之第23题合并K个升序链表

题目:

题解:

  1. func mergeTwoLists(list1, list2 *ListNode) *ListNode {
  2. dummy := &ListNode{} // 用哨兵节点简化代码逻辑
  3. cur := dummy // cur 指向新链表的末尾
  4. for list1 != nil && list2 != nil {
  5. if list1.Val < list2.Val {
  6. cur.Next = list1 // 把 list1 加到新链表中
  7. list1 = list1.Next
  8. } else { // 注:相等的情况加哪个节点都是可以的
  9. cur.Next = list2 // 把 list2 加到新链表中
  10. list2 = list2.Next
  11. }
  12. cur = cur.Next
  13. }
  14. // 拼接剩余链表
  15. if list1 != nil {
  16. cur.Next = list1
  17. } else {
  18. cur.Next = list2
  19. }
  20. return dummy.Next
  21. }
  22. func mergeKLists(lists []*ListNode) *ListNode {
  23. m := len(lists)
  24. if m == 0 { // 注意输入的 lists 可能是空的
  25. return nil
  26. }
  27. if m == 1 { // 无需合并,直接返回
  28. return lists[0]
  29. }
  30. left := mergeKLists(lists[:m/2]) // 合并左半部分
  31. right := mergeKLists(lists[m/2:]) // 合并右半部分
  32. return mergeTwoLists(left, right) // 最后把左半和右半合并
  33. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/453728
推荐阅读
相关标签
  

闽ICP备14008679号