我是靠谱客的博主 欢喜天空,最近开发中收集的这篇文章主要介绍链表总结(力扣:合并两个有序链表),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

单链表中的节点应该具有两个属性:val 和 next。

  • val 是当前节点的值
  • next 是指向下一个节点的指针/引用
  • 遍历l2,插入l1对应的位置。
    要为l1创建一个虚拟头结点,这样如果l2的最小值小于l1的最小值就可以头插了。

    l1链表 : l1 在左 , p1 在右 , l1从虚拟头结点开始, p1紧跟其后。
    l2链表 : l2 在左 , p2 在右 , l2从第一个结点开始, p2紧跟其后。

    每次比较 l2所指结点的值 与 p1所指结点的值 , 若满足l2 <= p1 , 则把l2 插到 p1 前面。 然后l2 与 p2 后移一位。
    否则 l1 与 p1 后移一位。

    struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
        if(l1 == NULL) return l2;
        if(l2 == NULL) return l1;
        
        struct ListNode newhead, *p1, *p2;//3个形参//声明结构体
        newhead.next = l1;//指向下一个节点的指针位置相同//头//结构体下的成员变量
        l1 = &newhead;//尾//把l1的地址复制过来但是数值没有过来,数值还是空的

  • //首尾节点相等
        
        while(l2 != NULL) {
            p1 = l1->next;//结构体指针下的成员变量->
            p2 = l2->next;
            if(p1 == NULL) {
                l1->next = l2;
                break;
            }
            if(l2->val <= p1->val) {

  •             l2->next = l1->next;//交换顺序
                l1->next = l2;//l1->l2->l1
                l2 = p2;
            }
            l1 = l1->next;
        }
        return newhead.next;
    }

     

最后

以上就是欢喜天空为你收集整理的链表总结(力扣:合并两个有序链表)的全部内容,希望文章能够帮你解决链表总结(力扣:合并两个有序链表)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部