题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VfjZ6Ct-1686493063120)(…/…/…/images/Pasted%20image%2020230611221617.png)]
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
Go
/**
* @author simple * @date 2023/6/11 21:23 * @version 1.0 * 虽然在leetcode上没有通过, 但是我觉得没什么问题
*/
package main
type ListNode struct {
Val int
Next *ListNode
}
var head *ListNode = new(ListNode)
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
if list1 == nil {
return list2
}
if list2 == nil {
return list1
}
for list1 != nil && list2 != nil {
if list1.Val < list2.Val {
addNode(head, list1.Val)
list1 = list1.Next
} else {
addNode(head, list2.Val)
list2 = list2.Next
}
}
if list1 != nil {
addNode(head, list1.Val)
}
if list2 != nil {
addNode(head, list2.Val)
}
return head.Next
}
func addNode(t *ListNode, v int) int {
if head == nil {
t = &ListNode{
v,
nil}
head = t
println("nil head")
return 0
}
// 如果当前节点下一个节点为空
if t.Next == nil {
//t.Next指向下一个节点
t.Next = &ListNode{
v,
nil}
return -2
}
// 如果当前节点下一个节点不为空
return addNode(t.Next, v)
}
func main() {
list1Head := new(ListNode)
addNode(list1Head, 2)
list2Head := new(ListNode)
addNode(list2Head, 1)
lists := mergeTwoLists(list1Head.Next, list2Head.Next)
for lists != nil {
println(lists.Val)
lists = lists.Next
}
}
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}
if l1.Val < l2.Val {
l1.Next = mergeTwoLists(l1.Next, l2)
return l1
}
l2.Next = mergeTwoLists(l1, l2.Next)
return l2
}