單鏈表 兩個線性表的合併(不破壞原鍊錶 尾插法)

2021-10-12 13:53:59 字數 845 閱讀 9862

題意:單鏈表的儲存結構:

typedef

struct linklist

分析:

這裡是線性表的合併,如何合併呢?

這裡有兩種情況,分為:

1.破環原有鍊錶

2.不破壞原有鍊錶

這裡採用不破壞原有鍊錶情況。

不破壞原有鍊錶是什麼意思呢?

(複製過去)

現在有兩個鍊錶l1.l2。都帶有頭結點。但是,這裡不能破壞他們,所以這裡新建乙個鍊錶l3. 將l1和l2的資料都複製過去。

所以用這種方式就不會破壞它們。

思路:

1.定義兩個指標各指向各鍊錶。定義乙個尾指標。生成乙個頭結點。

2.通過while迴圈,迴圈條件為p!=null&& q!=null。在迴圈體中,每次都要生成新節點。

3.將兩個鍊錶中的資料複製過去。

4.將多餘部分也複製過去

5.尾指標置為空。

c**實現:

void

merge1

(linklist * l1,linklist * l2,linklist *

&l3)

if(q!=null) p = q;

while

(p!=null)

r->next = null;

}

合併兩個有序單鏈表

include using namespace std typedef struct nodenode,linklist void creatlist linklist l void insert int n,node p void show linklist l cout num head2 ne...

合併兩個有序單鏈表

思路 第一種 遞迴法 這個方法不好想,遞過去的時候做的事情是找到新的單鏈表的下乙個節點,歸的時候做的是告訴每個節點的next是什麼繫結關係,帶入資料就能知道怎麼回事 public listnode merge listnode a,listnode b if b null listnode newh...

合併兩個有序單鏈表

題目 給定兩個有序單鏈表的頭節點head1和head2,請合併兩個有序鍊錶,合併後的鍊錶依然有序,並返回合併後的鍊錶的頭節點。例如 0 2 3 7 null 1 3 5 7 9 null 合併後的鍊錶為 0 1 2 3 3 5 7 7 9 null 本題考察鍊錶基本操作 關鍵是能寫出時間複雜度o m...