合併兩個排序的鍊錶(C 簡單區)

2021-10-09 19:22:40 字數 1263 閱讀 4546

題目:輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

示例1:

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

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

限制:0 <= 鍊錶長度 <= 1000

一開始的思路是將l2上的節點乙個個拆下來與l1各個節點的值進行比對,然後以此方法將l2節點全部按大小順序插入到l1中,最後返回l1。

**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

l2->next=q;

r->next=l2;

q=l1;

l2=p;

}return l1;}}

;

結果展示

所以又換了一種方法。這種方法與排序演算法中的歸併排序演算法一致,這裡是將兩個有序的鍊錶歸併到另乙個新煉表中,使之依然有序。

演算法流程:

1.初始化:偽頭節點dum,節點res指向dum。

2.迴圈合併:當l1 或l2為空時跳出;

當l1->val < l2->val時: res的後繼節點指定為l1,並l1向前走一 步;

當l1->val ≥ l2->val 時: res的後繼節點指定為l2 ,並l2向前走一步;

節點res向前走一步,即res = res->next。

3.合併剩餘尾部:跳出時有兩種情況, 即l1為空或l2為空。

若l1≠null :將l1新增至節點res之後;

否則:將l2 新增至節點res之後。

4.返回值:合併鍊錶在偽頭節點 dum之後,因此返回dum->next即啊。

**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

res=res-

>next;

} res-

>next=l1?l1:l2;

return dum-

>next;}}

;

合併兩個排序鍊錶

struct listnode class solution else while pstart1 null pstart2 null plast next pstart1 plast pend1 pend1 pend1 next pstart1 pend1 else plast next psta...

合併兩個排序鍊錶

描述 將兩個排序鍊錶合併為乙個新的排序鍊錶樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 將兩個鍊錶當中的對應元素的值進行比較,重新確定新鍊錶當中元素的位置。若第乙個鍊錶當前位置的值小於第二個鍊錶當前值,則不需要改變位置,第乙個鍊錶的指標...

合併兩個排序鍊錶

問題描述 將兩個排序鍊錶合併為乙個新的排序鍊錶 樣例 給出1 3 8 11 15 null,2 null,返回1 2 3 8 11 15 null。解題思路 遍歷第二個鍊錶的每乙個節點,然後與第乙個節點的第乙個節點比較,如果第二個鍊錶節點的值小於第乙個,就插入到第乙個煉表裡,如果大於就到下乙個節點。...