1.1. 题目

1.1.1. 合并K个排序链表

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6



1.1.2. 题解:

  • 合并两个有序链表的升级版
  • 原链表都是有序的

1.1.3. 思路:

  • 作弊法: 遍历所有的数据,放入到数组里,然后进行排序,然后再填充到链表里...
  • 正常思路: 先去做一下 合并两个有序链表
    • 依次遍历数组
    • 可以每两个进行合并,得到新的数组链表,再继续合并到最后一个链表为止
    • 也可以第一个和第二个合并,得新链表,然后新链表和第三个合并,一直合并到最后一个!
    • 我用后面这个方法解的,因为我刚刚做完合并两个有序链表,可以拿来直接用

1.1.4. 代码:

点击显示
 func mergeKLists(lists []*ListNode) *ListNode {
     if len(lists) == 1 {
         return lists[0]
     }

     var list *ListNode
     for i:=0;i<len(lists);i++ {
         if i == 0 {
             list = mergeTwoLists(lists[0],lists[1])
             i++
             continue
         }
         list = mergeTwoLists(list,lists[i])
     }

     return list
 }

 func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {

     if l1 == nil {
         return l2
     }

     if l2 == nil {
         return l1
     }
     newNode := &ListNode{Val:0}
     head := newNode
     for l1 != nil && l2 != nil {
         if l1.Val > l2.Val {
             newNode.Next = l2
             l2 = l2.Next
         } else {
             newNode.Next = l1
             l1 = l1.Next
         }
         newNode = newNode.Next
     }

     if l1 != nil {
         newNode.Next = l1
     }

     if l2 != nil {
         newNode.Next = l2
     }

     return head.Next
 }

 // 作弊法
 func mergeKLists2(lists []*ListNode) *ListNode {
     var values []int
     listLen := len(lists)
     if listLen == 0 {
         return nil
     }
     for i:=0;i<listLen;i++ {
         ls := lists[i]
         for ls != nil  {
             values = append(values,ls.Val)
             ls = ls.Next
         }
     }
     sort.Sort(sort.IntSlice(values))

     newList := &ListNode{
     }
     head := newList
     for k,v := range values {
         head.Next = &ListNode{
             Val:v,
         }
         if k == len(values) {
             head.Next = nil
         }
         head = head.Next
     }

     return newList.Next
 }

results matching ""

    No results matching ""