1. 程式人生 > 其它 >[轉載]Meta AI:多模態理解研究進展與未來

[轉載]Meta AI:多模態理解研究進展與未來

21. 合併兩個有序連結串列 - 力扣(LeetCode) (leetcode-cn.com)

 

 

 思路1 遞迴:

1.首先判斷兩個連結串列中是否有空連結串列,如果有則返回另一個。如果都是空,則返回那個都可以了。

2.然後比較兩個節點的值,如果list1的值小於list2的值,則list1的下一個節點和list2繼續比較,反之則從list2的下一個節點開始比較

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
 func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
    if  list1==nil {
        return list2
    }
    if list2==nil{
        return list1
    }
    if list1.Val<list2.Val{
        list1.Next=mergeTwoLists(list1.Next,list2)
        return list1
    }else{
        list2.Next=mergeTwoLists(list1,list2.Next)
        return list2
    }
}

 

 思路2 迭代:

1.建立一個新節點resNode,再把這個節點的地址賦值給另一個新節點res。

2.當list1和list2兩個連結串列都不為空的時候,遍歷這兩個連結串列。

3.比較兩個連結串列當前節點的大小,把小的節點地址賦給resNode,再把對應的連結串列的節點指向到下一個。resNode也指向下一個。

4.當兩個連結串列其中一個已經遍歷完成,則把另一個連結串列的後續節點接到resNode上。

5.通過res記錄的resNode最初的位置,返回合併後的第一個節點。

func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
	resNode := new(ListNode)
	res := resNode
	for list1 != nil && list2 != nil {
		if list1.Val < list2.Val {
			resNode.Next = list1
			list1 = list1.Next
			resNode = resNode.Next
		} else {
			resNode.Next = list2
			list2 = list2.Next
			resNode = resNode.Next
		}
	}
	if list1 == nil {
		resNode.Next = list2
	} else {
		resNode.Next = list1
	}
	return res.Next
}