【LeetCode从零单排】No21.MergeTwoSortedLists

简介: 题目      这道题是链表的简单应用,将两个有序链表合成一个有序链表。       思路是:表一,表二各取两个对象,分别指向current和next,进行交叉比较排序。Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together

题目

      这道题是链表的简单应用,将两个有序链表合成一个有序链表。
       思路是:表一,表二各取两个对象,分别指向current和next,进行交叉比较排序。
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
      //判断三种null情况
       if(l1==null && l2==null) return l1;
       if(l1==null && l2!=null) return l2;
       if(l1!=null && l2==null) return l1;
       //定义头指针
       if(l1.val<=l2.val){
           //分别对l1和l2取当前和下一节点指针
           ListNode first=l1;
           ListNode second=l1.next;
           ListNode l2_temp=l2;
           ListNode l2_second=l2.next;
           //l2插向l1
           while(l2_temp!=null){
               if(second!=null){
               if(l2_temp.val>=first.val && l2_temp.val<=second.val){
                  first.next=l2_temp;
                  l2_temp.next=second;
                  first=first.next;
                  second=first.next; 
                  //这个try catch是指当l2_second=null时,l2_second.next是空指针,这时已经排序结束,所以return
                 try{
                  l2_temp=l2_second;                  
                  l2_second=l2_second.next;}
                 catch (Exception e){
                	 return l1;
                 }
                                 
               }
               else{
            	      first=first.next;
                   second=first.next;
               }}
               else{
                   first.next=l2_temp;
                  return l1;
               }
              
           }
           return l1;
       }
       else{
    	   ListNode first=l2;
           ListNode second=l2.next;
           ListNode l1_temp=l1;
           ListNode l1_second=l1.next;
           while(l1_temp!=null){
               if(second!=null){
               if(l1_temp.val>=first.val && l1_temp.val<=second.val){
                  first.next=l1_temp;
                  l1_temp.next=second;
                  first=first.next;
                  second=first.next;                  
                 try{
                  l1_temp=l1_second;                  
                  l1_second=l1_second.next;}
                 catch (Exception e){
                	 return l2;
                 }
                                 
               }
               else{
            	      first=first.next;
                   second=first.next;
               }}
               else{
                   first.next=l1_temp;
                  return l2;
               }
              
           }
           return l2;
           
       }
       
    }
    
}


/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/



目录
相关文章
|
7月前
LeetCode题:174. 地下城游戏
LeetCode题:174. 地下城游戏
67 0
LeetCode题:174. 地下城游戏
|
7月前
leetcode-913:猫和老鼠
leetcode-913:猫和老鼠
88 1
|
7月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
71 0
|
7月前
leetcode-419:甲板上的战舰
leetcode-419:甲板上的战舰
41 0
|
算法 Android开发 容器
LeetCode 周赛上分之旅 #35 两题坐牢,菜鸡现出原形
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
94 0
|
存储
剑指Offer - 面试题14:剪绳子
剑指Offer - 面试题14:剪绳子
86 0
|
机器学习/深度学习
剑指offer 13. 剪绳子
剑指offer 13. 剪绳子
74 0
|
算法 C++
【每日算法Day 62】LeetCode 815. 公交路线
【每日算法Day 62】LeetCode 815. 公交路线
LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)
LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)
【寒假每日一题】AcWing 4652. 纸张尺寸
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
88 0