剑指Offer-合并两个排序的链表

题目描述:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

 

思路:

1.判断两个链表是否为空,若其中一个链表为空,则直接返回另一个链表。

2.新建一个节点作为合并后的链表头部,最后返回时需要返回该头部的下一个节点。

3.当两个链表均不为空时,按照数字大小依次插入到新链表中。

4.当其中一个链表为空时,将另一个链表的后续元素全部插入到新链表中。

 

代码:

 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         if(pHead1 == NULL)
14             return pHead2;
15         
16         if(pHead2 == NULL)
17             return pHead1;
18         
19         ListNode *newhead = new ListNode(0);
20         ListNode *current = newhead;
21         while(pHead1 != NULL && pHead2 != NULL){
22             if(pHead1 -> val <= pHead2 ->val){
23                 current->next = pHead1;
24                 current = current->next;
25                 pHead1 = pHead1->next;
26             }else{
27                 current->next = pHead2;
28                 current = current->next;
29                 pHead2 = pHead2->next;
30             }
31         }
32         if(pHead1 != NULL){
33             current -> next = pHead1;
34         }else if(pHead2 != NULL){
35             current ->next = pHead2;
36         }
37         return newhead->next;
38     }
39 };

 

posted @ 2017-08-17 15:00  Sindyang  阅读(101)  评论(0编辑  收藏  举报