鍊錶合併
描述定義一種單向鍊錶,鍊錶結點linknode包含乙個整數和乙個指向下乙個節點的指標。編寫下面四個子函式:
1、建立鍊錶: 從標準輸入讀取資料,並建立鍊錶,返回建立的煉表頭
linknode *createlinklist();
2、合併鍊錶:引數是兩個鍊錶的頭指標,返回合併後鍊錶的頭指標。合併後的鍊錶仍然有序。
linknode *mergelinklist(linknode *a, linknode *b);
3、遍歷並顯示合併後的鍊錶的元素。
void displaylinklist(linknode *linklist);
4. 釋放鍊錶空間:如果createlinklist中使用了new分配空間,這裡迴圈使用delete釋放
void destroylinklist(linknode *linklist);
注意:
1. 假設使用者輸入資料時,是按照資料從小到大輸入的,即鍊錶是乙個有序鍊錶,不需要排序操作;
2. 沒有按要求編寫函式的,即使通過也會被扣分。
3. 你的程式應該使用盡可能少的記憶體空間。(在mergelinklist函式中盡量不要分配新的linknode)
關於輸入輸入的第一行是乙個整數m,代表第乙個鍊錶的元素個數(1 <= m <= 100000);
第二行是m個整數,代表第乙個鍊錶的每個元素,題目保證m個整數從小到大排列。
第三行是乙個整數n,代表第二個鍊錶的元素個數(1 <= n <= 100000);
第四行使n個整數,代表第二個鍊錶的每個元素,題目保證n個整數從小到大排列。
關於輸出輸出只有1行,輸出以空格分隔的 m + n 個整數,按照從小到大的順序排列。
例子輸入3例子輸出1 3 5
32 4 6
1 2 3 4 5 6
1 #include2view codeusing
namespace
std;
3struct
linknode4;
8 linknode *createlinklist();//
建立鍊錶: 從標準輸入讀取資料,並建立鍊錶,返回建立的煉表頭
9 linknode *mergelinklist(linknode *, linknode *);//
合併鍊錶:引數是兩個鍊錶的頭指標,返回合併後鍊錶的頭指標。合併後的鍊錶仍然有序。
10void displaylinklist(linknode *);//
遍歷並顯示合併後的鍊錶的元素。
11void destroylinklist(linknode *);//
釋放鍊錶空間:如果createlinklist中使用了new分配空間,這裡迴圈使用delete釋放
12 linknode *createlinklist()
1332
else
33 tmp->next =null;34}
35return
head;36}
37 linknode *mergelinklist(linknode *a, linknode *b)//
將b併入a
3854
if (tmp1->next->n < tmp2->n)
5558
if (tmp1->n > tmp2->n)
5969}70
else
7183
else
8489}90
}91}92
void displaylinklist(linknode *linklist)
93 while (tmp !=null);
101}
102void destroylinklist(linknode *linklist)
103112
}113
intmain()
114
大水題 然而講鍊錶的時候我完全睡著了
於是這道題成為了我有史以來wa最多的一次
之後一定要好好看ppt……
謹記教誨
鍊錶 合併有序鍊錶
題目 將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 題解我們這裡利用到了乙個前哨節點,因為兩個鍊錶實際上是已經排好序了,所以我們只需要比較兩個節點誰大誰小,找到小的接上去,然後那個...
鍊錶 合併有序鍊錶
將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。leetcode21 class solution else head head.next head.next l1 null?l2 l1 return result.next class solut...
鍊錶的合併
兩個線性表a,b,均以單鏈表做儲存結構,編寫演算法將表a和表b合併成乙個按元素值遞增有序排列的線性表c,要求用原表的結點空間存放表c define null 0 include stdio.h include malloc.h typedef struct lnode lnode,linklist ...