首页 > 其他分享 >5.合并两个有序链表

5.合并两个有序链表

时间:2024-03-17 16:02:07浏览次数:17  
标签:ListNode head1 val cur1 合并 next 链表 有序

链表合并

B站左程云讲解连接

链表结构

public static class ListNode {
        public int val;
        public ListNode next;

        public ListNode(int val) {
            this.val = val;
        }

        public ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
     }

合并方法

class Solution {
        public static ListNode mergeTwoLists(ListNode head1, ListNode head2) {
            if (head1 == null || head2 == null) {
                return head1 == null ? head2 : head1;//如果head1 == null则返回head2,否则返回head1
            }
            //将新链表的头节点指向原先两个链表中头节点较小的链表的第一个元素
            ListNode head = head1.val <= head2.val ? head1 : head2;
            //cur1指向新链表头节点所在链表的下一个节点
            ListNode cur1 = head.next;
            //cur2指向另一个链表的toujeid
            ListNode cur2 = head == head1 ? head2 : head1;
            //初始化指向新链表的头节点,在后续过程pre.next总指向新链表中下一个添加的节点,并在添加一个节点后移动至新添加的节点位置
            ListNode pre = head;

            while (cur1 != null && cur2 != null) {
                if (cur1.val <= cur2.val) {
                    pre.next = cur1;
                    cur1 = cur1.next;
                }else {
                    pre.next = cur2;
                    cur2 = cur2.next;
                }
                 pre = pre.next;//移动至刚添加进新链表的节点位置

            }
            pre.next = cur1==null?cur2:cur1;//如果cu1为null则将cur2余下部分merge后边,否则将cur1余下部分拼接后边
            return head;
        }
    }

对应测试链接

标签:ListNode,head1,val,cur1,合并,next,链表,有序
From: https://blog.csdn.net/ccccslt/article/details/136782583

相关文章

  • leetcode 21 合并两个有序链表
    https://www.bilibili.com/video/BV1xa411A76q?p=4&vd_source=cdfcf738e0429ec2cffe4778dd8dd0e4 #迭代#https://blog.csdn.net/m0_61661179/article/details/127205244classSolution:defmergeTwoLists(self,list1:Optional[ListNode],list2:Optional[List......
  • 数据结构(二)双链表---以题为例
    实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 ......
  • 6-179 顺序表(有序表)的合并(并集)*
    已知顺序表的结构定义如下:typedefstruct{intsize,length;longlong*element;}LIST;说明:参数dst为指示目标顺序表的指针,src1和src2分别为指示两个源顺序表的指针。函数将src1和src2所指两个源顺序表合并到dst所指目标顺序表中。目标顺序表中保存......
  • LeetCode2024年3月14日每日一题(2789. 合并后数组中的最大元素)
    这里写目录标题单调栈代码的核心逻辑如下:单调栈单调栈是一种特殊的数据结构,它在算法设计中被广泛使用,尤其是在处理与栈相关的问题时,如括号匹配、最长有效括号子串、最小窗口子串等。单调栈的核心思想是栈内的元素保持某种单调性(递增或递减),这使得它在处理特定问题时比......
  • pyCharm oj 习题 列表合并、去重、排序
    列表合并、去重、排序ProblemDescription从键盘输入两个数列,构成两个列表list1、list2,合并这两个列表为list3,将list3去掉重复元素、降序排序后生成list4.InputDescription输入两个数列,以英文逗号分隔OutputDescription输出列表list1、list2、list3、list4SampleInpu......
  • 滴水逆向笔记系列-c++总结4-41.new-delete-vector-42.链表
    第四十课c++8new-delete-vector1.内存空间复习在类外函数外的变量就是全局变量,程序一编译地址就已经确定了的临时数据,参数和局部变量就是在堆栈里而使用malloc函数动态申请的则是在堆里2.跟踪调试反汇编函数我们调用malloc函数申请内存,但是不是malloc一个函数完成整个......
  • 141. 环形链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/boolhasCycle(structListNode*head){structListNode*slow=head;structListNode*fast=head;while(fast&&fast->......
  • 234. 回文链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*pre;booljudge(structListNode*head){if(!head)returntrue;booltemp=judge(head->next);if(!temp)r......
  • 83. 删除排序链表中的重复元素c
     /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/intpre;structListNode*f(structListNode*head){if(!head)returnNULL;if(head->val==pre){structListNode*tem......
  • 21. 合并两个有序链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*mergeTwoLists(structListNode*list1,structListNode*list2){structListNode*root=NULL;if(!list1)returnl......