面试题 合并两个有序链表
生活随笔
收集整理的這篇文章主要介紹了
面试题 合并两个有序链表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這道題常規解法有兩種,可能還有其它。
解法1,設置指針 i, j 分別指向兩個鏈表,比較 i, j 大小,小的先掛到新鏈表上,然后移動指針繼續比較,直到某個鏈表走到最后,這時候把另一個鏈表剩余的全掛過去。
解法2, 使用遞歸方法,這個我一開始也沒想到,方法也很簡單,把合并兩個鏈表為一個的過程看成是在兩個鏈表中每次找出一個
最小值的過程。然后把這個最小值掛到prevNode->next指針上。
代碼分別如下:
節點定義:
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應用程序、內核、驅動、后臺開發交流討論群(745510310),感興趣的同學可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。
?
總結
以上是生活随笔為你收集整理的面试题 合并两个有序链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 花呗还款后额度没恢复
- 下一篇: 面试题leetcode 3. 无重复字