21. 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
思路:将两个链表遍历放入一个数组中,再将数组排序,再放入一个新建的链表中。
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
int a[100],i,k=0,j,t;
while(l1)
{
a[k++]=l1->val;
l1=l1->next;
}
while(l2)
{
a[k++]=l2->val;
l2=l2->next;
}
for(i=0;i<k-1;i++)
{
for(j=i+1;j<k;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
struct ListNode* head;
struct ListNode* r;
head=r=NULL;
for(i=0;i<k;i++)
{
struct ListNode* p=(struct ListNode*)malloc(sizeof(struct ListNode));
p->val=a[i];
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
r->next=p;
}
r=p;
}
return head;
}