【LC_Lesson7】---将两个有序链表合成新的一个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

太久没复习数据结构和C/C++的链表实现了,一时间感觉无从下手头蒙了半天,花了半天时间整理了下单链表的基本知识,同时整理了下单链表的前序插入和后续插入。如下链接

https://www.cnblogs.com/szhb-5251/p/11770322.html

一. 解题思路

思路一:

1)  两个链表均是有序的,而且各个节点也都是实际存在的,可以考虑重新拉一个链表出来,然后依次扫描两个有序链表,有序的将元素分别插入在新链表上面。一直到某条链表扫描结束,然后把另外一条链表剩余的元素插入在当前新链表的后面即可。

C++实现:

 1 class Solution {
 2 public:
 3     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
 4         if(l1 == NULL) 
 5             return l2;
 6         if(l2 == NULL)
 7             return l1;
 8         ListNode *p = l1;
 9         ListNode *q = l2;
10         ListNode *result = new ListNode(0);
11         ListNode *r = result;
12 
13         while(q && p)
14         {
15             if (q->val < p->val)
16             {
17                 r->next = q;
18                 r = r->next;
19                 q = q->next;
20             }
21             else
22             {
23                 r->next = p;
24                 r = r->next;
25                 p = p->next;
26             }
27         }
28         if (q)
29             r->next = q;
30         if (p)
31             r->next = p;  
32         return result->next;
33     }
34 };

 

 思路二:

   其次可以使用递归的方法,


 

posted @ 2019-10-31 19:28  一粒厘米  阅读(1190)  评论(0编辑  收藏  举报