日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题 合并两个有序链表

發(fā)布時(shí)間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题 合并两个有序链表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這道題常規(guī)解法有兩種,可能還有其它。

解法1,設(shè)置指針 i, j 分別指向兩個(gè)鏈表,比較 i, j 大小,小的先掛到新鏈表上,然后移動(dòng)指針繼續(xù)比較,直到某個(gè)鏈表走到最后,這時(shí)候把另一個(gè)鏈表剩余的全掛過去。

解法2, 使用遞歸方法,這個(gè)我一開始也沒想到,方法也很簡單,把合并兩個(gè)鏈表為一個(gè)的過程看成是在兩個(gè)鏈表中每次找出一個(gè)

最小值的過程。然后把這個(gè)最小值掛到prevNode->next指針上。

代碼分別如下:

節(jié)點(diǎn)定義:

typedef struct node{int data;struct node *next;}*pNode, Node;

解法1:

pNode listMerge(pNode pHeadA, pNode pHeadB){pNode i,j;pNode head = NULL, body = NULL;if (!pHeadA)return pHeadB;if (!pHeadB)return pHeadA;i = pHeadA;j = pHeadB;while(i && j){//比較大小if (i->data < j->data){if (!head)body = head = i;else{ body->next = i;body = i;}i = i->next;}else{if (!head)body = head = j;else{body->next = j;body = j;}j = j->next;}}if (i)body->next = i;elsebody->next = j;return head; }

解法2:

pNode recursiveMerge(pNode pHeadA, pNode pHeadB){pNode head;if (!pHeadA) return pHeadB;if (!pHeadB) return pHeadA;if (pHeadA->data < pHeadB->data){head = pHeadA;head->next = recursiveMerge (pHeadA->next, pHeadB);}else{head = pHeadB;head->next = recursiveMerge (pHeadA, pHeadB->next);}}

=============================================================================================

Linux應(yīng)用程序、內(nèi)核、驅(qū)動(dòng)、后臺(tái)開發(fā)交流討論群(745510310),感興趣的同學(xué)可以加群討論、交流、資料查找等,前進(jìn)的道路上,你不是一個(gè)人奧^_^。
?

總結(jié)

以上是生活随笔為你收集整理的面试题 合并两个有序链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。