Skip to content

Commit b9f4254

Browse files
author
Yeqi Tao
committed
Add Soulution.go for 0023.Merge k Sorted Lists
1 parent f95b941 commit b9f4254

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
}

0 commit comments

Comments
 (0)