leetCode 21. Merge Two Sorted Lists 合并链表

简介:

21. Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

题目大意:合并两个有序的链表

思路:通过比较两个链表的节点大小,采用尾插法建立链表。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
  * Definition for singly-linked list.
  * struct ListNode {
  *     int val;
  *     ListNode *next;
  *     ListNode(int x) : val(x), next(NULL) {}
  * };
  */
class  Solution {
public :
     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
         ListNode * newListHead,* newListNode,*newListTail;
 
         newListHead = (ListNode *) malloc ( sizeof (ListNode));
         newListTail = newListHead;
         
         
         
         
         while ( (NULL != l1) && (NULL != l2) )
         {
             if (l1->val <= l2->val)
             {
                 newListNode = (ListNode *) malloc ( sizeof (ListNode));
                 newListNode->val = l1->val;
                 newListTail->next = newListNode;
                 newListTail = newListNode;
                 l1 = l1->next;
             }
             else
             {
                 newListNode = (ListNode *) malloc ( sizeof (ListNode));
                 newListNode->val = l2->val;
                 newListTail->next = newListNode;
                 newListTail = newListNode;
                 l2 = l2->next;
             }
         }
         
         if (NULL != l1)
         {
             while (l1)
             {
                 newListNode = (ListNode *) malloc ( sizeof (ListNode));
                 newListNode->val = l1->val;
                 newListTail->next = newListNode;
                 newListTail = newListNode;
                 l1 = l1->next;
             }
         }
         
         if (NULL != l2)
         {
             while (l2)
             {
                 newListNode = (ListNode *) malloc ( sizeof (ListNode));
                 newListNode->val = l2->val;
                 newListTail->next = newListNode;
                 newListTail = newListNode;
                 l2 = l2->next;
             }
         }
         newListTail->next = NULL;
         return  newListHead->next;
     }
};

本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1834921

相关文章
|
存储 缓存 算法
LeetCode刷题---Two Sum(一)
LeetCode刷题---Two Sum(一)
Leetcode 4. Median of Two Sorted Arrays
题目描述很简单,就是找到两个有序数组合并后的中位数,要求时间复杂度O(log (m+n))。 如果不要去时间复杂度,很容易就想到了归并排序,归并排序的时间复杂度是O(m+n),空间复杂度也是O(m+n),不满足题目要求,其实我开始也不知道怎么做,后来看了别人的博客才知道有个二分法求两个有序数组中第k大数的方法。
81 0
|
存储 算法 安全
LeetCode - #2 Add Two Numbers
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
188 0
LeetCode - #2 Add Two Numbers
|
存储 算法 安全
LeetCode - #1 Two Sum
我们社区从本期开始会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。
LeetCode - #1 Two Sum
|
存储 C++ Python
LeetCode刷题---Add Two Numbers(一)
LeetCode刷题---Add Two Numbers(一)
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
127 0
|
算法 测试技术
LeetCode 88. 合并两个有序数组 Merge Sorted Array
LeetCode 88. 合并两个有序数组 Merge Sorted Array
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
130 2