[轉載]Meta AI:多模態理解研究進展與未來
阿新 • • 發佈:2022-04-18
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 }