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.
注意:指针使用过程中注意判空。
合并两个已排序的链表,将两个链表一起遍历一遍,将最小的值放入新的链表,若最后一个链表不为空,一个为空,将不为空的链表的剩余部分赋给新链表。
因为开始temp的值指向l3的地址,所以l3.next为temp遍历之后的值
/**
* 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 l3(INT_MIN);
ListNode* temp = &l3;
while(l1 && l2)
{
if(l1->val < l2->val)
{
temp->next = l1;
l1 = l1->next;
}
else
{
temp->next = l2;
l2 = l2->next;
}
temp = temp->next;
}
temp->next = l1?l1:l2;
return l3.next;
}
};
使用递归方法,时间更短
//使用递归
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(!l1) return l2;
if(!l2) return l1;
if(l1->val < l2->val)
{
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else
{
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}