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;
    }
  • 相关阅读:
    P1242 新汉诺塔(hanio)
    P2878 [USACO07JAN]保护花朵Protecting the Flowers
    P2096 最佳旅游线路
    [P1363] 幻想迷宫
    在矩阵上跑最小生成树
    tarjan+topsort
    tarjan缩点
    【P3398]】仓鼠找sugar
    树形数组暴力
    解决跨域问题
  • 原文地址:https://www.cnblogs.com/runsdeep/p/12813967.html
Copyright © 2011-2022 走看看