合并两个排序的链表

题目描述

  输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
  解法1:非递归解法
 1 ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
 2 {
 3     if(pHead1==NULL)return pHead2;
 4     if(pHead2==NULL)return pHead1;
 5     if(pHead1->val > pHead2->val)
 6     {
 7         ListNode *tmp=pHead1;
 8         pHead1=pHead2;
 9         pHead2=tmp;
10     }
11     ListNode *newHead=pHead1;
12     ListNode *pcur=pHead1;
13     pHead1=pHead1->next;
14     while(pHead1 && pHead2)
15     {
16         if(pHead1->val < pHead2->val)
17         {
18             pcur->next=pHead1;
19             pcur=pcur->next;
20             pHead1=pHead1->next;
21         }else{
22             pcur->next=pHead2;
23             pcur=pcur->next;
24             pHead2=pHead2->next;
25         }
26     }
27     if(pHead1)pcur->next=pHead1;
28     if(pHead2)pcur->next=pHead2;
29     return newHead;
30 }

 

  解法2:递归解法

 1 ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
 2 {
 3     if(pHead1==NULL)return pHead2;
 4     if(pHead2==NULL)return pHead1;
 5     if(pHead1->val > pHead2->val)
 6     {
 7         ListNode *tmp=pHead1;
 8         pHead1=pHead2;
 9         pHead2=tmp;
10     }
11     ListNode *newHead=pHead1;
12     newHead->next=Merge(pHead1->next, pHead2);
13     return newHead;
14 }

 

 

posted @ 2017-12-23 11:18  jeysin  阅读(80)  评论(0编辑  收藏  举报