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.
Example:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
// Merge_Two_Sorted_Lists.cpp: 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* p, *L;
p = (struct ListNode *)malloc(sizeof(struct ListNode));
p->next = NULL;
L = p;
while (l1 != NULL || l2 != NULL) {
if (l1 == NULL) {
p->next = l2;
break;
}
else if (l2 == NULL) {
p->next = l1;
break;
}
if (l1->val >= l2->val) {
p->next = l2;
l2 = l2->next;
p = p->next;
p->next = NULL;
}
else {
p->next = l1;
l1 = l1->next;
p = p->next;
p->next = NULL;
}
}
return L->next;
}
int main()
{
struct ListNode *l1,*l2,*l3;
l1= (struct ListNode *)malloc(sizeof(struct ListNode)); //申请头结点空间
l1->next = NULL; //初始化一个空链表
l1->val = 1;
l1->next = NULL;
l2 = (struct ListNode *)malloc(sizeof(struct ListNode)); //申请头结点空间
l2->val = 2;
l2->next = l1->next;
l1->next = l2;
l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
l3->val = 4;
l3->next = l1->next->next;
l1->next->next = l3;
struct ListNode *p1, *p2, *p3;
p1 = (struct ListNode *)malloc(sizeof(struct ListNode)); //申请头结点空间
p1->next = NULL; //初始化一个空链表
p1->val = 1;
p1->next = NULL;
p2 = (struct ListNode *)malloc(sizeof(struct ListNode)); //申请头结点空间
p2->val = 3;
p2->next =p1->next;
p1->next = p2;
p3 = (struct ListNode *)malloc(sizeof(struct ListNode));
p3->val = 4;
p3->next =p1->next->next;
p1->next->next = p3;
//struct ListNode l2;
struct ListNode *L = mergeTwoLists(l1, p1);
while (L != NULL) {
printf("%d\n", L->val);
L = L->next;
}
return 0;
}