File tree 1 file changed +53
-0
lines changed
solution/0023.Merge k Sorted Lists
1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * Definition for singly-linked list.
3
+ * type ListNode struct {
4
+ * Val int
5
+ * Next *ListNode
6
+ * }
7
+ */
8
+ func mergeKLists (lists []* ListNode ) * ListNode {
9
+ if len (lists ) == 0 {
10
+ return nil
11
+ }
12
+ for len (lists ) != 1 {
13
+ newLists := make ([]* ListNode , 0 )
14
+ for i := 0 ; i < len (lists ); i ++ {
15
+ if i < len (lists ) - 1 {
16
+ nl := merge2List (lists [i ], lists [i + 1 ])
17
+ newLists = append (newLists , nl )
18
+ i ++
19
+ } else if i == len (lists ) - 1 && len (lists )% 2 == 1 {
20
+ newLists = append (newLists , lists [i ])
21
+ }
22
+ }
23
+ lists = newLists
24
+ }
25
+ return lists [0 ]
26
+ }
27
+
28
+ func merge2List (l1 , l2 * ListNode ) * ListNode {
29
+ p := & ListNode {}
30
+ h := p
31
+ for l1 != nil || l2 != nil {
32
+ if l1 == nil && l2 != nil {
33
+ p .Next = l2
34
+ p = p .Next
35
+ l2 = l2 .Next
36
+ } else if l1 != nil && l2 == nil {
37
+ p .Next = l1
38
+ p = p .Next
39
+ l1 = l1 .Next
40
+ } else {
41
+ if l1 .Val < l2 .Val {
42
+ p .Next = l1
43
+ p = p .Next
44
+ l1 = l1 .Next
45
+ } else {
46
+ p .Next = l2
47
+ p = p .Next
48
+ l2 = l2 .Next
49
+ }
50
+ }
51
+ }
52
+ return h .Next
53
+ }
You can’t perform that action at this time.
0 commit comments