这是树的第4篇算法,力扣链接。
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例 2:
输入:l1 = [], l2 = [] 输出:[]
这道题其实在之前介绍过,最简单的思路是左右手的方法,一个一个的将最小指针放入结果集里。
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {result := &ListNode{}temp := resultfor list1 != nil || list2 != nil {left := math.MaxIntif list1 != nil {left = list1.Val}right := math.MaxIntif list2 != nil {right = list2.Val}if left < right {temp.Next = list1temp = temp.Nextlist1 = list1.Next} else {temp.Next = list2temp = temp.Nextlist2 = list2.Next}}return result.Next
}
当然,也可以不用这么复杂的判断逻辑:
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {result := &ListNode{}temp := resultfor list1 != nil && list2 != nil {if list1.Val < list2.Val {temp.Next = list1list1 = list1.Next} else {temp.Next = list2list2 = list2.Next}temp = temp.Next}if list1 != nil {temp.Next = list1} else {temp.Next = list2}return result.Next
}
此外还有递归的写法:
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {if list1 == nil {return list2} else if list2 == nil {return list1} else if list1.Val < list2.Val {list1.Next = mergeTwoLists(list1.Next, list2)return list1} else {list2.Next = mergeTwoLists(list2.Next, list1)return list2}
}