【剑指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是空指针

# 功能测试

  • 两个链表有多个节点,节点的值互不相同
  • 两个链表有多个节点,存在值相等的多个节点
posted @ 2018-03-17 21:44  wanglei5205  阅读(1679)  评论(0编辑  收藏  举报
levels of contents