Go语言有序链表归并

代码示例:

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>}
发布了158 篇原创文章 · 获赞 119 · 访问量 81万+

猜你喜欢

转载自blog.csdn.net/u013474436/article/details/104014662