leetcode合并有序链表

解题思路
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;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_42876655/article/details/90057006