zoukankan      html  css  js  c++  java
  • LeetCode 21 合并两个有序链表

    我的

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            ListNode* res;
            if(l1==NULL){
                res=l2;
                return res;
            }
            else if(l2==NULL){
                res=l1;
                return res;
            }
            else if((l2->val)<(l1->val)){
                res=l2;
                
                l2=l2->next;
            }
            else{
                res=l1;
                
                l1=l1->next;
            }
            ListNode* ans=res;
            while(1){
                if(l1==NULL){
                    res->next=l2;
                    return ans;
                }
                else if(l2==NULL){
                    res->next=l1;
                    return ans;
                }
                else if((l2->val)<(l1->val)){
                    res->next=l2;
                    res=res->next;
                    l2=l2->next;
                }
                else{
                    res->next=l1;
                    res=res->next;
                    l1=l1->next;
                }
            }
            
            return ans;
        }
    };

     最快的:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
            ListNode preHead(0), *p = &preHead;
            while(l1 != NULL && l2 != NULL){
                if(l1->val <= l2->val){
                    p->next = l1;
                    l1 = l1->next;
                }else{
                    p->next = l2;
                    l2 = l2->next;
                }
                p = p->next;
            }
    /*
            while(l1 != NULL){
                p->next = l1;
                l1 = l1->next;
                p = p->next;
            }
            while(l2 != NULL){
                p->next = l2;
                l2 = l2->next;
                p = p->next;
            }
    */
            if(l1 != NULL){
                p->next = l1;
                
            }
            if(l2 != NULL){
                p->next = l2;
                
            }
            return preHead.next;
        }
    };

    原来是注释里的,我改成了if。和我写的一样快。都是12ms。但是原提交却是8ms……

    我写得长,因为res->为NULL,没想到可以return  preHead.next,学到了。

  • 相关阅读:
    浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 && 路径记录 )
    二分图匹配
    Codeforces 939E Maximize ( 三分 || 二分 )
    冲刺第二周第七天
    冲刺第二周第六天
    冲刺第二周第五天
    构建之法阅读笔记04
    冲刺第二周第四天
    构建之法阅读笔记03
    构建之法阅读笔记02
  • 原文地址:https://www.cnblogs.com/azureice/p/leetcode21.html
Copyright © 2011-2022 走看看