解题思路
1.先统计两个两个链表的元素有多少个(getnum函数实现),用allnum变量存储,如果是0个直接
return null
2.再通过allnum经过循环遍历所有元素到vector类型的变量中
3.然后在利用sort(c++自带)函数进行排序
4.然后将排序好的元素都导入新的链表中
5.返回结果
代码块
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {//解题思路:现在是全部放进数组然后sort排序,然后倒进一个新链表
public:
int getnum(ListNode* l)
{
int num=0,i;
ListNode *start=l;
for(i=0;l!=NULL;i++)
{
l=l->next;
}
num=i;
l=start;
return num;
}
void getvalue(ListNode* l1, ListNode* l2,vector<int>&array,int allnum)
{
while(allnum--)
{
if(l1!=NULL)
{
array.push_back((*l1).val);
l1=l1->next;
}
else if(l2!=NULL)
{
array.push_back((*l2).val);
l2=l2->next;
}
}
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
int allnum;
int l1num=getnum(l1);
int l2num=getnum(l2);
allnum=l2num+l1num;
if(allnum==0)
{
return NULL;
}
vector<int>array;
getvalue(l1,l2,array,allnum);
sort(array.begin(),array.end());
ListNode* l3=new ListNode(array[0]);
ListNode* start=l3;
int i=1;
while(allnum---1)
{
l3->next=new ListNode(array[i++]);
l3=l3->next;
}
return start;
}
};