LeetCode第五題


2つの順序付きチェーンテーブルを結合
タイトルの説明:
2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:
入力:1->2->4、1->3->4出力:1->1->2->3->4->4分析:2つのチェーンテーブルは秩序チェーンテーブルであるため、2つのチェーンテーブルを同時に遍歴することができ、2つのチェーンテーブルの要素値を比較し、チェーンテーブル1の値が現在のチェーンテーブル2の値より小さい場合は、チェーンテーブル1を1つの要素後ろに移動し、チェーンテーブル2を動かさず、再び比較する.チェーンテーブル2の値がチェーンテーブル1より小さい場合は、チェーンテーブル2の現在のノードをチェーンテーブル1に挿入し、チェーンテーブル2の要素ポインタを1つ後ろに移動します.逆もまた然り.
具体的なコードは以下の通りです.
JAVAではチェーンテーブルクラスListNodeクラスは存在しないため,チェーンテーブルListNodeクラスのカプセル化を独自に実現する必要がある.コードは次のとおりです.
ここにチップを挿入
class ListNode {
  int val;
  ListNode next;
  public ListNode(int x){
    this.val=x;
    next=null;
  }
}

チェーンテーブルクラスをカプセル化した後、チェーンテーブルを作成してチェーンテーブルのマージを完了することができます.今回の解題では、再帰的に使用します.具体的なコードは以下の通りです.
public class Solution {
  
   public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
       if(l1==null){
         return l2;
       }
       if(l2==null){
         return l1;
       }
       if(l1.val<l2.val){
         l1.next=mergeTwoLists(l1.next, l2);
         return l1;
       }else{
         l2.next=mergeTwoLists(l1, l2.next);
         return l2;
       }

      }
   public static void main(String[] args) {
    ListNode l1=new ListNode(1);//    l1   
    ListNode l1Head=l1;  //    l1     
    ListNode l2=new ListNode(1);  //    l2   
    ListNode l2Head=l2; //    l2     
    for(int i=0;i<5;i++){  //    5        l1 
      ListNode temp=new ListNode(i+3);
      l1.next=temp;
      l1=l1.next;
    }
    
    for(int i=3;i<8;i++){//    5        l2 
      ListNode temp=new ListNode(i+1);
      l2.next=temp;
      l2=l2.next;
    }
    
    Solution su=new Solution();
    ListNode l3=su.mergeTwoLists(l1Head, l2Head);
    ListNode l3Head=l3; //    l3     
    while(l3!=null){//         
      System.out.println(l3.val); 
      l3=l3.next;
    }
    
  }
}