代码示例:
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func main() {
a := []int{1,3,5,7,9}
b := []int{2,4,6,8}
l1 := initList(a)
l2 := initList(b)
showList(l1)
showList(l2)
fmt.Println("-----------------------")
l3 := mergeList(l1, l2)
showList(l3)
}
func initList(l []int) *ListNode {
head := &ListNode{}
h := head
for _, v := range l {
h.Next = &ListNode{v,nil}
h = h.Next
}
return head
}
func showList(head *ListNode) {
for head.Next != nil {
head = head.Next
fmt.Println(head)
}
}
func mergeList(l1, l2 *ListNode) *ListNode {
head := &ListNode{}
h := head
l1 = l1.Next
l2 = l2.Next
for l1 != nil && l2 != nil {
if l1.Val < l2.Val {
h.Next = &ListNode{l1.Val, nil}
l1 = l1.Next
} else {
h.Next = &ListNode{l2.Val, nil}
l2 = l2.Next
}
h = h.Next
}
if l1 != nil {
for l1 != nil {
h.Next = &ListNode{l1.Val, nil}
l1 = l1.Next
h = h.Next
}
}
if l2 != nil {
for l2 != nil {
h.Next = &ListNode{l2.Val, nil}
l2 = l2.Next
h = h.Next
}
}
return head
}
运行结果:
&{1 0xc00000e200}
&{3 0xc00000e210}
&{5 0xc00000e220}
&{7 0xc00000e230}
&{9 <nil>}
&{2 0xc00000e260}
&{4 0xc00000e270}
&{6 0xc00000e280}
&{8 <nil>}
-----------------------
&{1 0xc00000e340}
&{2 0xc00000e350}
&{3 0xc00000e360}
&{4 0xc00000e370}
&{5 0xc00000e380}
&{6 0xc00000e390}
&{7 0xc00000e3a0}
&{8 0xc00000e3b0}
&{9 <nil>}