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