博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 21 合并两个有序链表
阅读量:4143 次
发布时间:2019-05-25

本文共 1201 字,大约阅读时间需要 4 分钟。

合并两个有序链表

题目

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4

输出:1->1->2->3->4->4

思路

因为两个链表是有序的,创建两个标记指针,一个指向l1链表,一个指向l2链表,比较两个的值,若l1指向的值小,p3就等于p1,指针后移,反之相同。当一个链表值被循环完后,另一个链表续在l3后

特殊情况
若有一个链表为空,则l3直接等于另一个链表
因为每次都是续在p3的next上,故l3头结点没有值,返回时从l3的next返回

代码

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){    struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode));    struct ListNode *p1 = l1;    struct ListNode *p2 = l2;    struct ListNode *p3 = l3;    if(!p1) {        l3 = l2;        return l3;    }     if(!p2) {        l3 = l1;        return l3;    }    while(p1 && p2) {        if(p1 -> val < p2 -> val) {            p3 -> next = p1;            p3 = p1;            p1 = p1 -> next;        } else {            p3 -> next = p2;            p3 = p2;            p2 = p2 -> next;        }     }    if(!p1) {        for(struct ListNode *p = p3; p2 != NULL; ) {            p -> next = p2;            p2 = p2 -> next;            p = p -> next;        }    }     if(!p2) {        for(struct ListNode *p = p3; p1 != NULL; ) {             p -> next = p1;             p1 = p1 -> next;             p = p -> next;        }    }    return l3 -> next;}

转载地址:http://swkti.baihongyu.com/

你可能感兴趣的文章
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
3.5 YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
查看>>
iOS菜鸟学习--如何避免两个按钮同时响应
查看>>
How to access the keys in dictionary in object-c
查看>>
iOS菜鸟学习—— NSSortDescriptor的使用
查看>>
hdu 3787 hdoj 3787
查看>>
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>
hdu 3788 hdoj 3788
查看>>
zju 1003 zoj 1003
查看>>
zju 1004 zoj 1004
查看>>
zju 1005 zoj 1005
查看>>
zju 1006 zoj 1006
查看>>
【虚拟机】虚拟化架构与系统部署(Windows系统安装)
查看>>
字节跳动安卓开发实习生面试分享
查看>>
好书分享之——《能力陷进》
查看>>
阅读笔记《c++ primer》
查看>>
阅读笔记《C++标准程序库》
查看>>
基于mirror driver的windows屏幕录像
查看>>
C语言8
查看>>