合并两个排序的链表递归和非递归C++实现
生活随笔
收集整理的這篇文章主要介紹了
合并两个排序的链表递归和非递归C++实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述:
輸入兩個(gè)單調(diào)遞增的鏈表,輸出兩個(gè)鏈表合成后的鏈表,要求合成后的鏈表滿足單調(diào)不減規(guī)則。
1、分析
已知輸入的兩個(gè)鏈表遞增有序,要使輸出的鏈表依然遞增有序,可以依次從輸入的兩個(gè)鏈表中挑選最小的元素插入到輸出的鏈表尾部,便可實(shí)現(xiàn)輸出鏈表遞增有序。?
2、數(shù)據(jù)結(jié)構(gòu)定義
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {} };3、遞歸實(shí)現(xiàn)
/*遞歸實(shí)現(xiàn)合并兩個(gè)排序鏈表*/ ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {if(pHead1 == NULL)return pHead2;if(pHead2 == NULL)return pHead1;if(pHead1->val < pHead2->val){pHead1->next = Merge(pHead1->next, pHead2);return pHead1;}else{pHead2->next = Merge(pHead1, pHead2->next);return pHead2;} }4、非遞歸實(shí)現(xiàn):
/*非遞歸實(shí)現(xiàn)合并兩個(gè)排序鏈表*/ ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {ListNode *pHead = new ListNode(0);ListNode *p = pHead;while(pHead1 != NULL && pHead2 != NULL){if(pHead1->val < pHead2->val){p->next = pHead1;pHead1 = pHead1->next;}else{p->next = pHead2;pHead2 = pHead2->next;}p = p->next;}if(pHead1 != NULL){p->next = pHead1;}if(pHead2 != NULL){p->next = pHead2;}return pHead->next; }5、總結(jié)
這道題使對(duì)單鏈表操作比較經(jīng)典的題目,無論是考研還是面試出現(xiàn)的概率都非常高。題目的思路較為簡(jiǎn)單,編碼實(shí)現(xiàn)稍微難點(diǎn),難度雖不大,但能考察編碼基礎(chǔ)功力和對(duì)單鏈表的深一層的理解,所以須熟練掌握。
?
轉(zhuǎn)載于:https://www.cnblogs.com/evenleee/p/8505981.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的合并两个排序的链表递归和非递归C++实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 珍爱如何隐藏自己
- 下一篇: 使用Amalgamate将C/C++项目