zoukankan      html  css  js  c++  java
  • 【LeetCode21】Merge Two Sorted Lists★

    1.题目描述:

    2.解题思路:

      本题是要合并两个已经有序的单链表,思路很简单,有两种方法:非递归和递归。

    3.Java代码:

    (1)非递归:

      为方便操作,定义一个辅助的头节点,然后比较原来两个链表的头节点,将小的那一个加入到合并链表,最后,当其中一个链表为空时,直接将另一个链表接入到合并链表即可。

     1 //public class LeetCode21 为测试
     2 public class LeetCode21 {
     3     public static void main(String[] args) {
     4         ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
     5         m1.next=m2;
     6         m2.next=m3;
     7         System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
     8         ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
     9         n1.next=n2;
    10         n2.next=n3;
    11         System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
    12         ListNode result=new Solution().mergeTwoLists(m1, n1);
    13         if(result!=null){
    14             System.out.print("合并链表:"+result.val);
    15             ListNode resultNext=result.next;
    16             while(resultNext!=null){
    17                  System.out.print("->"+resultNext.val);
    18                  resultNext=resultNext.next;
    19              }
    20         }
    21     }
    22 }
    23 class Solution {
    24      public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    25          ListNode fakeHead=new ListNode(0);
    26          ListNode p=fakeHead;
    27          while(l1!=null&&l2!=null){
    28              if(l1.val<l2.val){
    29                  p.next=l1;
    30                  l1=l1.next;
    31              }else{
    32                  p.next=l2;
    33                  l2=l2.next;
    34              }
    35              p=p.next;
    36          }
    37          if(l1!=null) p.next=l1;
    38          if(l2!=null) p.next=l2;
    39          return fakeHead.next;
    40         }
    41 }
    42 class ListNode {
    43     int val;
    44     ListNode next;
    45     ListNode(int x) { val = x; }
    46     }

    测试结果:

    (2)递归:

     1 //public class LeetCode21 为测试
     2 public class LeetCode21 {
     3     public static void main(String[] args) {
     4         ListNode m1=new ListNode(1),m2=new ListNode(3),m3=new ListNode(5);
     5         m1.next=m2;
     6         m2.next=m3;
     7         System.out.println("链表1:"+m1.val+"->"+m2.val+"->"+m3.val);
     8         ListNode n1=new ListNode(2),n2=new ListNode(4),n3=new ListNode(6);
     9         n1.next=n2;
    10         n2.next=n3;
    11         System.out.println("链表2:"+n1.val+"->"+n2.val+"->"+n3.val);
    12         ListNode result=new Solution().mergeTwoLists(m1, n1);
    13         if(result!=null){
    14             System.out.print("合并链表:"+result.val);
    15             ListNode resultNext=result.next;
    16             while(resultNext!=null){
    17                  System.out.print("->"+resultNext.val);
    18                  resultNext=resultNext.next;
    19              }
    20         }
    21     }
    22 }
    23 class Solution {
    24      public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    25          if(l1==null) return l2;
    26          if(l2==null) return l1;
    27          if(l1.val<l2.val){
    28              l1.next=mergeTwoLists(l1.next, l2);
    29              return l1;
    30          }else{
    31              l2.next=mergeTwoLists(l1, l2.next);
    32              return l2;
    33          }
    34         }
    35 }
    36 class ListNode {
    37     int val;
    38     ListNode next;
    39     ListNode(int x) { val = x; }
    40     }

    测试结果:

      

  • 相关阅读:
    006 date find
    005 输出重定向 > >>命令 echo命令 tail命令
    总结,一周,
    mokey 学习
    树状,
    定制,
    萌芽,
    到底为什么,
    会,
    “恋爱”,一路走来,
  • 原文地址:https://www.cnblogs.com/zhangboy/p/6498894.html
Copyright © 2011-2022 走看看