遍历l2,将l2的节点加入到l1中,遍历l1做检查,如果l2的val比l1的大则插入到l1的首部(注意到l1已经被改变,所以需要一个变量来保持最终的l1),否则找到l2应该插入到l1的位置,插入即可。应该注意保持链表不会断。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// write code here
//遍历l2将其插入到l1中,保证有序;
if(!l1)
return l2;
ListNode* p1 = l1;
while(l2)
{
while(l1)
{
if(l2->val >= l1->val)
{
if(l1->next)
{
if(l2->val <= l1->next->val)
{
//插入到l1并且保证链表不会断;
ListNode* tmp2 = l2->next;
ListNode* tmp = l1->next;
l1->next = l2;
l2->next = tmp;
l2 = tmp2;
break;
}
}else
{
//临时保存l2的下一个节点;
ListNode* tmp = l2->next;
//直接插入到l1;
l1->next = l2;
l1 = l1->next;
l1->next = NULL;
l2 = tmp;
break;
}
}
else
{
//l2的val比l1的大,插入到l1的前面;
ListNode* tmp = l2->next;
l2->next = l1;
l1 = l2;
l2 = tmp;
p1 = l1;
break;
}
l1 = l1->next;
}
}
return p1;
}
};
京公网安备 11010502036488号