【剑指offer-25】合并两个单调递增的链表,C++实现(链表)


原创博客,转载请注明出处!

1.题目

      输入两个单调递增的链表,输出两个链表合成后的链表(单调不减)。

                                                                                         image

2.思路(递归)

# 鲁棒性:

      如果链表1是空链表,则直接输出链表2。

      如果链表2是空链表,则直接输出链表1。

# 递归思路:

      定义三个指针,指向链表1头结点的指针p1,指向链表2头结点的指针p2,指向合并后链表头节点的指针head。比较p1和p2的值,如果p1<p2,那么head指向p1,p1指向p1的下一个节点;如果p1>p2,那么head指向p2,p2指向p2的下一个节点。依次类推……

                                                                                     image

3.代码

本题《牛客网》地址 

  1 /*
 2 struct ListNode {
 3 	int val;
 4 	struct ListNode *next;
 5 	ListNode(int x) :
 6 			val(x), next(NULL) {
 7 	}
 8 };*/
  9 class Solution {
 10 public:
 11     ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
 12     {
 13         // 鲁棒性(边界检查)
 14         if(pHead1==nullptr)
 15             return pHead2;
 16 
 17         if(pHead2==nullptr)
 18             return pHead1;
 19 
 20         // 递归合并
 21         ListNode* head = nullptr;
 22         if(pHead1->val < pHead2->val)
 23         {
 24             head = pHead1;
 25             head->next = Merge(pHead1->next,pHead2);
 26         }
 27         else
 28         {
 29             head = pHead2;
 30             head->next = Merge(pHead1,pHead2->next);
 31         }
 32 
 33         return head;
 34 
 35     }
 36 };

4.测试用例

# 边界测试

  • 链表1是空指针
  • 链表2是空指针
  • 链表1和链表2是空指针

# 功能测试

  • 两个链表有多个节点,节点的值互不相同
  • 两个链表有多个节点,存在值相等的多个节点


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM