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.
也就是将两个已经排好序的链表重新合并为一个新的链表,新的链表也是按照顺序存放。
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *ret, *tail, *pnew;
ret = (struct ListNode *)malloc(sizeof(struct ListNode));
int flag1 = 0;
int flag2 = 0;
ret->next = NULL;
tail = ret;
if (l1 == NULL&&l2 != NULL)
return l2;
if (l1 != NULL&l2 == NULL)
return l1;
if (l1==NULL&&l2==NULL)
return NULL;
while (l1 != NULL || l2 != NULL)
{
pnew = (struct ListNode *)malloc(sizeof(struct ListNode));
if (flag1 == 0 && flag2 == 0) {
if (l1->val > l2->val) {
pnew->val = l2->val;
l1 = l1;
l2 = l2->next;
if (l2 == NULL) {
flag1 = 1;
pnew->next = NULL;
tail->next = pnew;
tail = pnew;
continue;
}
}
else {
pnew->val = l1->val;
l2 = l2;
l1 = l1->next;
if (l1 == NULL) {
flag2 = 1;
pnew->next = NULL;
tail->next = pnew;
tail = pnew;
continue;
}
}
}
if (flag1 == 1) {
pnew->val = l1->val;
l1 = l1->next;
}
if (flag2 == 1) {
pnew->val = l2->val;
l2 = l2->next;
}
pnew->next = NULL;
tail->next = pnew;
tail = pnew;
}
return ret->next;
}