C/C++面试题—合并两个排序的链表【递归和循环两种方式】
生活随笔
收集整理的這篇文章主要介紹了
C/C++面试题—合并两个排序的链表【递归和循环两种方式】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表,
當然我們需要合成后的鏈表滿足單調不減規則。
解題思路
這道題既可以采用遞歸的方式,也可以采用循環的方式。
2者的思路都是殊途同歸的。
合并后的鏈表頭結點指向值域較小的頭結點,然后較小的鏈表往后移動繼續和另外一個鏈表的頭結點值域進行比較。
直到將其中一個鏈表鏈接完畢,再鏈接另外一個鏈表。
解題代碼
#include <iostream> #include "ListNode.h" using namespace std; /*題目描述 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成后的鏈表, 當然我們需要合成后的鏈表滿足單調不減規則。*/class SolutionMerge { public://遞歸方式ListNode* Merge(ListNode* pHead1, ListNode* pHead2){if (pHead1 == nullptr)return pHead2;if (pHead2 == nullptr)return pHead1;ListNode* mergeHead = nullptr;if (pHead1->val < pHead2->val){mergeHead = pHead1;mergeHead->next = Merge(pHead1->next, pHead2);}else{mergeHead = pHead2;mergeHead->next = Merge(pHead1, pHead2->next);}return mergeHead;}//循環方式ListNode* Merge2(ListNode* pHead1, ListNode* pHead2){ if (pHead1 == nullptr)return pHead2;if (pHead2 == nullptr)return pHead1;ListNode* mergeHead = nullptr;if (pHead1->val < pHead2->val){mergeHead = pHead1;pHead1 = pHead1->next;}else{mergeHead = pHead2;pHead2 = pHead2->next;}ListNode* pCur = mergeHead;//遞歸改為循環while (pHead1 != nullptr && pHead2 != nullptr){if (pHead1->val < pHead2->val){pCur->next = pHead1;pHead1 = pHead1->next;}else{pCur->next = pHead2;pHead2 = pHead2->next;}pCur = pCur->next;}if (pHead1 == nullptr)pCur->next = pHead2;if (pHead2 == nullptr)pCur->next = pHead1;return mergeHead;}void PrintList(ListNode* pHead){if (pHead == nullptr)return;ListNode* pNode = pHead;while (pNode != nullptr){cout << pNode->val << endl;pNode = pNode->next;}} };int main(int argc, char *argv[]) {//測試SolutionMerge solution;ListNode node1(1);ListNode node2(3); node1.next = &node2;ListNode node3(5); node2.next = &node3;ListNode node4(7); node3.next = &node4;ListNode Node1(2);ListNode Node2(4); Node1.next = &Node2;ListNode Node3(6); Node2.next = &Node3;ListNode Node4(8); Node3.next = &Node4;ListNode* p1 = solution.Merge(&node1, &Node1);solution.PrintList(p1);return 0; }運行測試
總結
以上是生活随笔為你收集整理的C/C++面试题—合并两个排序的链表【递归和循环两种方式】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux无线网卡的工作模式
- 下一篇: 栈应用:判断字符串中括号是否成对出现