合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
例如:
输入:l1 = [1,2,8], l2 = [1,4,5,6]
输出:[1,1,2,4,5,6,8]
package main
import "fmt"
//链表节点的定义
type LinkedListNode struct {
Value int
Next *LinkedListNode
}
func mergeTwoLists(list1 *LinkedListNode, list2 *LinkedListNode) *LinkedListNode {
//递归,如果链表为空返回另一个链表
if list1 == nil {
return list2
}
if list2 == nil {
return list1
}
if list1.Value < list2.Value {
list1.Next = mergeTwoLists(list1.Next, list2)
return list1
} else {
list2.Next = mergeTwoLists(list1, list2.Next)
return list2
}
}
//遍历
func (n *LinkedListNode) PrintNode() {
for n != nil {
fmt.Printf("%d \t ", n.Value)
n = n.Next
}
fmt.Println()
}
func main() {
list1 := &LinkedListNode{
Value: 1,
Next: &LinkedListNode{
Value: 2,
Next: &LinkedListNode{
Value: 8,
},
},
}
list2 := &LinkedListNode{
Value: 1,
Next: &LinkedListNode{
Value: 4,
Next: &LinkedListNode{
Value: 5,
Next: &LinkedListNode{
Value: 6,
},
},
},
}
aa := mergeTwoLists(list1, list2)
aa.PrintNode() //因为是方法的调用所以要这么写
}
结果:
PS C:\goproject\src\pingcaptest\mergelist\test> go run .\test.go
1 1 2 4 5 6 8