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