Shirlies
宁静专注认真的程序媛~

题目:

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

链接:

http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路:

第一种思路:创建一个新的链表,将两个链接不断合并到新的链表中,这样是不会修改输入参数的,但是这样会暴内存使用过大!

第二种思路:

1、确定最终返回链表为pHead1(事实上,可以通过比较两个链表头的数据的大小,让链表头数据小的链表作为返回链表)

2、考虑两个链表头的大小,如果pHead2的表头数据要小于pHead1的,则需要将pHead2的表头作为pHead1的表头,修改pHead1的指向

3、比较pHead1中当前链表遍历指针的下一个节点和pHead2的遍历指针的当前节点的大小,如果pHead2的遍历指针节点值要小,则将pHead2的遍历指针指向的节点插入到pHead1遍历指针的后面,调整pHead1的遍历指针为下一个节点即可

4、考虑遍历结束后,pHead2的遍历指针后面还有很多元素的情况

总的来说:就是将pHead2的小的元素不断添加到pHead1当前遍历位置处,否则,pHead1就往后面移动,直到找到一个比phead2遍历指针大的元素

代码:

 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 && pHead2 == NULL){
14             return NULL;
15         }
16         
17         if(pHead1 == NULL){
18             return pHead2;
19         }
20         
21         if(pHead2 == NULL){
22             return pHead1;
23         }
24         
25         
26         ListNode *pHead2Iter = pHead2;
27         if(pHead1->val > pHead2Iter->val){
28             ListNode *tmpNode = pHead2Iter;
29             pHead2Iter = pHead2Iter->next;
30             tmpNode->next = pHead1;
31             pHead1 = tmpNode;
32         }
33         ListNode *pHead1Iter = pHead1;
34         while(pHead1Iter->next != NULL && pHead2Iter != NULL){
35             if(pHead1Iter->next->val >= pHead2Iter->val){
36                 ListNode *tmpNode = pHead2Iter;
37                 pHead2Iter = pHead2Iter->next;
38                 tmpNode->next = pHead1Iter->next;
39                 pHead1Iter->next = tmpNode;
40             }
41             pHead1Iter = pHead1Iter->next;
42         }
43         
44         if(pHead2Iter != NULL){
45             pHead1Iter->next = pHead2Iter;
46         }
47         
48         return pHead1;
49     }
50 };

 

posted on 2016-09-01 19:43  Shirlies  阅读(290)  评论(0)    收藏  举报