• 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;
    }
  • 相关阅读:
    如何看Linux服务器的load average
    java中File读取文件中文乱码
    LR代理录制
    虚拟机打开虚拟文件报不兼容,无法使用
    面向对象示例-注册登录例子
    pickle 模块
    item方法
    加密方法
    @classmethod 和 @staticmethod 用法
    python 中 @property 的用法
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12813967.html
Copyright © 2020-2023  润新知