LeetCode 21-30

21. 合并两个有序链表

 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        auto dummy=new ListNode(-1),cur=dummy;
        while(l1&&l2)
        {
            if(l1->val<l2->val)
            {
                cur=cur->next=l1;
                l1=l1->next;
            }
           else {
                cur=cur->next=l2;
                l2=l2->next;
            }
        }
        if(l1)cur->next=l1;//l1 表示listnode数目 后一个表示以l1为起点的链表  
         if(l2)cur->next=l2;
        return dummy->next;

    }

22.括号生成

最喜欢暴搜了呢 思路好直观

vector <string>ans;
  string s;
    vector<string> generateParenthesis(int n) {
       dfs(n,0,0,s);
       return ans;
    }
    void dfs(int n,int l,int r,string seq){
        if(l>n||r>n)return ;
        if(l==n&&r==n)ans.push_back(seq);
        if(l>r&&r<n) dfs(n,l,r+1,seq+')');
        if(l<n) dfs(n,l+1,r,seq+'(');
    }

23. 合并K个升序链表

把所有链表放到一个vector里排序即可

  ListNode* mergeKLists(vector<ListNode*>& lists) {
          auto dummy=new ListNode(-1),cur=dummy;
        //ListNode* dummy=new ListNode(-1),cur=dummy;
        vector <int>a;
        for(auto x :lists){
            while(x){
                a.push_back(x->val);
                x=x->next;
            }
        }
        sort(a.begin(),a.end());
        for(auto x:a){
            cur->next=new ListNode(x);
            cur=cur->next;
        }
        return dummy->next;
    }

24. 两两交换链表中的节点 (中等)


 ListNode* swapPairs(ListNode* head) {
        auto dummy=new ListNode(-1);
        dummy->next=head;
        for(auto p=dummy ;p->next&&p->next->next ; ){//要用3个点 ,造个dummy 不然找不到头
            auto a=p->next,b=a->next;

            a->next=b->next;

            b->next=a;

            p->next=b;

            p=a;//

        }
     return dummy->next;
    }
posted @ 2021-10-12 19:37  liv_vil  阅读(33)  评论(0)    收藏  举报