將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
輸入: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...