2つのソートされたチェーンテーブルをマージ(剣指offer_プログラミング問題)

1829 ワード

タイトルの説明:
2つの単調に増加したチェーンテーブルを入力し、2つのチェーンテーブルの合成後のチェーンテーブルを出力します.もちろん、合成後のチェーンテーブルは単調で減少しない規則を満たす必要があります.
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/

本題の知識点:チェーンテーブルの目的:2つのチェーンフォームが単調で減らないチェーンテーブルに調整されます.構想:与えられた2つのチェーンテーブルlist 1,list 2を十分に利用する.リストt 1,list 2をテールプラグ法により解体して新しいチェーンテーブルhead(先頭ノード)に組み立てる.ここでは、ヘッダノードcurr=new ListNode(0)が設定されている.最初のノードの操作を容易にするためです(後のノードと同じように、対応する値は意味がなく、任意に設定できます).ヘッドノードを使用するメリット:
  • ヘッダノードは、操作の統一と利便性のために設けられており、最初の要素ノードの前に置くと、そのデータドメインは一般的に意味がありません(もちろん、チェーンテーブルの長さを格納したり、監視哨戒したりすることもできます).
  • ヘッダノードが存在すると、最初の要素ノードの前にノードを挿入し、最初のノードを削除する操作は、他のノードの操作と統一される.ヘッダノードは、ヘッダノードの後ろの最初のノードである最初の要素のノードです.
  • ヘッダノードはチェーンテーブルに必要ではありません.

  • コード:
    public class Solution {
        public ListNode Merge(ListNode list1,ListNode list2) {
            ListNode head,curr;
            curr = new ListNode(0);//   
            head = curr;//     ,            
            while(list1!=null && list2!=null){//    
                if(list1.val

    このコードは再帰的ではありません.
    牛客大神ピザおじさんの再帰バージョン(簡潔明瞭、コメントエリアでこの方法がうるさいと評価されている-^-):リンク:https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337出典:牛客网大神コード:
    public ListNode Merge(ListNode list1,ListNode list2) {
           if(list1 == null){
               return list2;
           }
           if(list2 == null){
               return list1;
           }
           if(list1.val <= list2.val){
               list1.next = Merge(list1.next, list2);
               return list1;
           }else{
               list2.next = Merge(list1, list2.next);
               return list2;
           }       
       }