zoukankan      html  css  js  c++  java
  • LeetCode T21.Merge Two Sorted Lists/合并两个有序链表

     本题中给定两个有序链表让我们进行重新连接,这里我们可以将其看作对两条链表重组的过程,而由于是有序链表,其连接必定是从左向右进行,我们设定两个指针,一个指针做头节点,另一个用来做追踪最小元素,在两个链表的遍历过程中先一一对比,较小的元素处链表指针后移一位,追踪指针指向该较小的节点,另一条链表的链表指针不动,与后移后的新一个节点进行对比,若小于该节点,则同样后移,追踪指针更新指向位置,另一个链表指针位置不变。这样最终只是一个包含两个链表的循环,时间复杂度为O(m+n),而运行过程中变量个数为常数,因此空间复杂度为O(1)。

    我的题解代码如下,leetcode上运行时间4ms,内存占用5.6MB

    struct ListNode{
        int val;
        struct ListNode *next;
    };
    
    struct ListNode *mergeTwoLists(struct ListNode *l1,struct ListNode *l2){
        struct ListNode *head=(struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode *add=head;
        struct ListNode *p=l1,*q=l2;
        while(p && q){
            if(p->val<=q->val){
                add->next=p;
                add=add->next;
                p=p->next;
            }
            else{
                add->next=q;
                add=add->next;
                q=q->next;
            }
        }
        if(!p && q) add->next=q;
        else add->next=p;
        return head->next;
    }
  • 相关阅读:
    solr不是标准的java project解决方案
    solr 索引库的维护
    solr linux配置
    JSON跨域问题总结
    阿里云字体图标的引用
    Android 体系结构
    java.lang.NoClassDefFoundError 异常
    java java.uitl.Random产生随机数
    Android 应用间的集成
    iOS7状态栏字体颜色修改
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12813967.html
Copyright © 2011-2022 走看看