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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++面试题—合并两个排序的链表【递归和循环两种方式】

發布時間:2025/3/15 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++面试题—合并两个排序的链表【递归和循环两种方式】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。