《剑指offer》面试题25:合并两个排序的链表(C++实现)
2019-05-28 20:15
309 查看
《剑指offer》面试题25:合并两个排序的链表(C++实现)
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解决思路
这道题重在对于问题的分析和理解。
我们函数是得到了两个头节点的指针。
我们需要定义一个合并后的链表头节点,然后比较两个链表头节点的值,其中值更小的节点作为合并链表头节点的下一个节点。
值更大的那个节点与值更小的那个节点的下一节点继续放入函数判断并决定哪一个节点要继续链接到我们的合并链表中。
显然可以用递归进行实现。
思路一:递归实现
//运行时间:4ms //运行内存:488K /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(pHead1==nullptr) return pHead2; else if(pHead2==nullptr) return pHead1; ListNode* pMergeHead = nullptr; if(pHead1->val > pHead2->val) { pMergeHead = pHead2; pMergeHead->next = Merge(pHead1,pHead2->next); } else { pMergeHead = pHead1; pMergeHead->next = Merge(pHead2,pHead1->next); } return pMergeHead; } };
思路二:非递归实现
非递归实现比较复杂,这里就不再赘述,有兴趣的朋友不妨尝试一下。
小结
1.这道题的关键是要头脑清晰,抓住关键。把握递归结构。
2.注意代码的鲁棒性。防止程序去访问空指针,否则会崩溃。
这里如果1是空指针,合并的结果就是2。如果2是空指针,合并的结果就是1。
参考文献
《剑指offer》
牛课网刷题链接link.
相关文章推荐
- 剑指offer面试题25:合并两个排序的链表(Java 实现)
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- 剑指offer面试题25:合并两个排序的链表(c++ 递归+非递归)
- 剑指offer--面试题25:合并两个排序的链表
- 【剑指offer】面试题25:合并两个排序的链表
- JAVA实现合并两个排序的链表(《剑指offer》)
- 面试题25:合并两个排序的链表
- 《剑指Offer》学习笔记--面试题17:合并两个排序的链表
- 剑指面试题25-合并两个排序的链表
- 剑指offer题解C++【16】合并两个排序的链表
- 165. 合并两个排序链表(merge-two-sorted-lists)(c++)----lintcode面试题之链表
- 《剑指offer》面试题17—合并两个排序链表
- 剑指offer:面试题 17:合并两个排序的链表
- 剑指offer(面试题17):合并两个已排序的链表
- C++实现两个已经排序的链表进行合并
- 剑指Offer-25:合并两个排序的链表
- C++实现合并两个排序的链表
- 【剑指offer】面试题 25:合并两个排序的链表
- 剑指offer 面试题15 合并两个排序的链表
- 【Java】 面试题25:合并两个排序的链表