合并有序数组 合并有序链表 迭代 递归
TODO
// 非降序 func mergeOrdered(a, b []int) []int { m := len(a) n := len(b) if m == 0 { return b } if n == 0 { return a } if m+n == 0 { return a } ia := 0 ib := 0 c := m + n var r []int for i := 0; i < c; i++ { r = append(r, 0) var v int if ia < m { if ib < n { if a[ia] > b[ib] { v = b[ib] ib++ } else { v = a[ia] ia++ } } else { v = a[ia] ia++ } } else { v = b[ib] ib++ } r[i] = v } return r }
https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/
21. 合并两个有序链表
递归
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
	if list1 == nil && list2 == nil {
		return nil
	}
	if list1 == nil {
		return list2
	}
	if list2 == nil {
		return list1
	}
	node := &ListNode{}
	if list1.Val < list2.Val {
		node.Val = list1.Val
		node.Next = mergeTwoLists(list1.Next, list2)
	} else {
		node.Val = list2.Val
		node.Next = mergeTwoLists(list1, list2.Next)
	}
	return node
}
迭代
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
	if list1 == nil && list2 == nil {
		return nil
	}
	if list1 == nil {
		return list2
	}
	if list2 == nil {
		return list1
	}
	var node *ListNode
	var l []*ListNode
	for {
		if list1 == nil && list2 == nil {
			break
		}
		n := &ListNode{}
		if list1 != nil {
			if list2 != nil {
				if list1.Val > list2.Val {
					n.Val = list2.Val
					list2 = list2.Next
					l = append(l, n)
					continue
				}
			}
			n.Val = list1.Val
			list1 = list1.Next
		} else {
			n.Val = list2.Val
			list2 = list2.Next
		}
		l = append(l, n)
	}
	n := len(l)
	for i := 0; i < n; i++ {
		j := &ListNode{Val: l[n-1-i].Val}
		j.Next = node
		node = j
	}
	return node
}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号