zoukankan      html  css  js  c++  java
  • 36. 合并两个排序的链表

     算法
    (二路归并) O(n)

        1.新建头部的保护结点dummy,设置cur指针指向dummy。
        2.若当前l1指针指向的结点的值val比l2指针指向的结点的值val小,则令cur的next指针指向l1,且l1后移;否则指向l2,且l2后移。
        3.然后cur指针按照上一部设置好的位置后移。
       4.循环以上步骤直到l1或l2为空。
       5.将剩余的l1或l2接到cur指针后边。



    时间复杂度

    两个链表各遍历一次,所以时间复杂度为O(n)

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* merge(ListNode* l1, ListNode* l2) {
            ListNode *dummy = new ListNode(0);
            ListNode *cur = dummy;
            while(l1 && l2){
                if(l1->val < l2->val) 
                {
                    cur->next = l1;
                    l1 = l1->next;
                }
                else 
                {
                    cur->next = l2;
                    l2 = l2->next;
                }
                cur = cur->next;//指完之后把cur向后移动一个
            }
            //判断是l1空了,还是l2空了,再把剩下的链表元素拼上。怎么拼?一个一个拼上?
            //看了代码,直接是通过cur->next把剩下的元素拼接上了
            //cur -> next = (l1 != NULL ? l1 : l2);
            //cout<<l1<<endl;
            //cout << l2->val <<endl;
            //cout << cur->val <<endl;
            cur->next = (l1==NULL ? l2 : l1);
            return dummy->next;
            
        }  
    };

    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    pamamiko的学习笔记
    pamamiko的安装
    python基本语法1.1--十进制与十六进制数之间的相互转换
    mnist深入--用卷积神经网络改善mnist
    minst数据集怎么跑
    七大常见排序算法总结(Java语言)
    ubuntu 16.03 Anaconda Tensorflow(CPU)安装
    IntelliJ Idea 2017 免费激活方法
    Ubuntu下安装deb格式的软件
    win10下配置java环境
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12306045.html
Copyright © 2011-2022 走看看