数据结构 将两个有序的链表合并为一个新链表

问题描述

将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。
比如{1,4} {3,5},合并就是{1,3,4,5};

解题思路

首先我们要判定是否有一个链表为空,都为空,返回空,一个为空,则返回不为空的那个;其次找到,两个链表的第一个节点,比较小的那个,作为主链(head),将另一个的节点元素,依次比较,并入其中,最后肯定有一个链表先走完,那么只需要把未走完后续链表并入就好了。

代码展示

   public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
        // write code here
      if(l1 == null) return l2;
      if(l2 == null) return l1;
      //先处理头
      ListNode head = (l1.val <= l2.val)? l1:l2;
      ListNode tail = head;
      l1 = (head == l1)? l1.next:l1;
      l2 = (head == l2)? l2.next:l2;
      while(l1 != null && l2 != null)
      {
          if(l1.val <= l2.val){
              tail.next = l1;
              l1 = l1.next;
          }else{
              tail.next = l2;
              l2 = l2.next;
          }
          tail = tail.next;
      }
      tail.next = (l1 == null)? l2 : l1;
      return head;
    }
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值