資料結構單鏈表之合併兩個有序鍊錶筆記。

2021-10-22 17:35:17 字數 1783 閱讀 2484

將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

輸入:l1 = [1,2,4], l2 = [1,3,4]

輸出:[1,1,2,3,4,4]

示例 2:

輸入:l1 = , l2 =

輸出:示例 3:

輸入:l1 = , l2 = [0]

輸出:[0]

l1指向的結點值小於或者等於l2指向的結點值;則prev指向的結點的後繼節指標指向l1,也就是prev->next=l1,然後l1指標向後移動一位;之後prev指標向後移動一位,即指向其下乙個節點。

l1指向的結點值大於l2指向的結點值;則prev指向的結點的後繼節指標指向l2,也就是prev->next=l2,然後l2指標向後移動一位;之後prev指標向後移動一位,即指向其下乙個節點。

一種情況:l1指向的結點值不為空,二種情況:l2指向的值不為空,此時要做的就是將不為空的結點,全部放在pre指向的結點之後。這時通過這個虛擬的頭結點便可以遍歷整個合併之後的結點數。

製作不易,覺得對你有用點個?,可好~( ̄▽ ̄)~*客官!

#include#includetypedef struct node

node,*pnode;

int global_values=0;//全域性變數用於判斷當前是鍊錶1還是鍊錶2

pnode initlist();//鍊錶初始化以及插入資料

pnode mergelist(pnode l1,pnode l2);//合併兩個鍊錶

void print(pnode l);//列印鍊錶

pnode initlist()

int num;

printf("please input your num node!!\n");

scanf("%d",&num);

int i=0;

int values;

pnode ptail=phead;

ptail->next=null;

if(global_values<=0) }

else }

global_values++;

return phead;

}pnode mergelist(pnode l1,pnode l2)

if(lb==null)

while(null!=la&&null!=lb)

else

p=p->next;

if(null!=lb)

if(null!=la)

}return dumphead;

}void print(pnode l)

printf("\n");

return;

}int main()

謝謝各位**!

資料結構 兩個有序單鏈表合併

尾插法建表 void createfromtail linklist l else linklist mergelinklist linklist la,linklist lb else if pa 若表la未完,剩餘元素全部新增到lc r next pa else r next pb free l...

合併兩個有序單鏈表

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...