題目要求:
本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。函式介面定義:
list merge
( list l1, list l2 )
;
其中list結構定義如下:
typedef
struct node *ptrtonode;
struct node
;typedef ptrtonode list;
/* 定義單鏈表型別 */
l1和l2是給定的帶頭結點的單鏈表,其結點儲存的資料是遞增有序的;函式merge要將l1和l2合併為乙個非遞減的整數序列。應直接使用原序列中的結點,返回歸併後的帶頭結點的煉表頭指標。裁判測試程式樣例:
#include
#include
typedef
int elementtype;
typedef
struct node *ptrtonode;
struct node
;typedef ptrtonode list;
list read()
;/* 細節在此不表 */
void
print
( list l )
;/* 細節在此不表;空煉表將輸出null */
list merge
( list l1, list l2 )
;int
main()
/* 你的**將被嵌在這裡 */
輸入樣例:3輸出樣例:1 3 5
52 4 6 8 10
1 2 3 4 5 6 8 10演算法思想:null
null
將兩個鍊錶l1和l2從分別從第乙個結點開始進行比較,較小的連在l上,然後繼續讓未遍歷的l1,l2的結點進行分別比較,當某乙個鍊錶遍歷結束後,進行判斷,將未遍歷完的鍊錶全部鏈到l後面。
注意:兩個鍊錶l1,l2帶頭結點。
函式:
/*
【注意】
1.兩個鍊錶l1,l2帶頭結點
2.臨時指標pl1和l1本質上並沒有區別,都是實參l1的副本,使用pl1的目的是
在函式中pl1作為移動的指標進行鏈結,而l1始終指向頭結點(注意即使在函
數中更改l1的指向,實參l1的指向也不會發生變化,不過函式最後的將l1置為
空這一步會出問題)
*//*
【解題思路】
將兩個鍊錶l1和l2分別從第乙個結點開始進行比較,較小的連在l上,然後
繼續讓未遍歷的l1,l2的結點進行分別比較,當某乙個鍊錶遍歷結束後,進行
判斷,將未遍歷完的鍊錶全部鏈到l後面
*/
list merge
(list l1,list l2)
else
}//此時某乙個鍊錶已經遍歷結束,下面進行判斷,將未遍歷的鍊錶全部鏈到l後面
if(pl1)
l -> next = pl1;
else
if(pl2)
l -> next = pl2;
//根據題目要求,將l1和l2置為空
l1 -> next =
null
; l2 -> next =
null
;return l0;
//返回l的頭結點
}
鍊錶 合併兩個有序鍊錶
標籤 鍊錶 題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。解題思路 兩種解法 遞迴和非遞迴 拓展 參考 public listnode merge listnode list1,listnode list2 else 非遞迴 public li...
鍊錶 21 合併兩個有序鍊錶
題目 將兩個公升序鍊錶合併為乙個新的公升序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 解體方法 暴力法和遞迴 暴力法思路 首先鍊錶這種資料結構是乙個只能從頭訪問的,本題中,因為兩個鍊錶中的頭節點都要先進行比較之後才能確...
LeetCode 鍊錶 合併兩個有序鍊錶
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 使用迭代。如下 definition for singly linked list.struct listnode listnode ...