1. 程式人生 > 實用技巧 >生成隨機數

生成隨機數

技術標籤:C++演算法

這裡寫目錄標題

合併兩個有序連結串列

將兩個升序連結串列合併為一個新的升序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

方法1——遞迴

我們直接將以上遞迴過程建模,同時需要考慮邊界情況。

如果 l1 或者 l2 一開始就是空連結串列 ,那麼沒有任何操作需要合併,所以我們只需要返回非空連結串列。
否則,我們要判斷 l1 和 l2 哪一個連結串列的頭節點的值更小,然後遞迴地決定下一個新增到結果裡的節點。

如果兩個連結串列有一個為空,遞迴結束。

ListNode* mergeTwoListsOne(ListNode* l1, ListNode* l2){
    if(l1==NULL)return l2;
    if(l2==NULL)return l1;
    if(l1->val<l2->val){
        l1->next=mergeTwoListsOne(l1->next,l2);
        return l1;
    }else{
        l2->next=mergeTwoListsOne(l1,l2->next)
; return l2; } }

方法2——迭代

每次從兩個連結串列中摘取一個節點下來,放到新的連結串列中

ListNode* mergeTwoListsTwo(ListNode* l1, ListNode* l2){
     ListNode* head = new ListNode(-1);
     ListNode* prev = head;
     while (l1 != NULL && l2 != NULL) {
          if (l1->val < l2->val) {
              prev-
>next = l1; l1 = l1->next; } else { prev->next = l2; l2 = l2->next; } prev = prev->next; } // 合併後 l1 和 l2 最多隻有一個還未被合併完,我們直接將連結串列末尾指向未合併完的連結串列即可 prev->next = l1 == NULL ? l2 : l1; return head->next; }