Leetcode第2題、2数加算アルゴリズム--Java解法を最も理解しやすい


まず問題を見てみましょう.チェーン時計がよく分からないなら、この記事を見てもいいです.https://blog.csdn.net/weixin_44407699/article/details/97612030
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
例:
入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
ソース:力ボタン(LeetCode)リンク:https://leetcode-cn.com/problems/add-two-numbers著作権はインターネットの所有に帰属する.商業転載は公式の授権に連絡してください.非商業転載は出典を明記してください.
まずこの問題を分析してみましょう
  • は、計算のたびに次のノード
  • にジャンプする.
  • 生成キャリー演算
  • の2つのチェーンテーブルの長さが異なります.
  • をどのように処理すればいいですか.
  • 最高位加算がちょうど10に等しい場合、
  • はどのように処理しますか?
    if()条件文で条件解決を設定できます
    以下は私の解法で、参考にすることができて、ロジックは基本的にすべて比較的に簡単で、代価はコードの量が少し大きいです
        public static ListNode add(ListNode l1, ListNode l2) {
    		ListNode result = new ListNode(0);//    
    		ListNode l1flag = l1;//         l1、l2 result       ,  flag
    		ListNode l2flag = l2;
    		ListNode resultflag = new ListNode(0);
    		resultflag=result;
    		int num=0;//    
    		while(l1flag!=null){//l1flag  
    			if(l2flag==null){//l1flag   ,l2flag     
    				resultflag.val=l1flag.val+num;
    				num=0;
    				if(resultflag.val>=10){
    					num=1;
    					resultflag.val-=10;
    				}
    				l1flag=l1flag.next;//flag       
    				if(l1flag!=null||num!=0)
    					resultflag.next=new ListNode(0);
    				resultflag=resultflag.next;
    			}
    			
    			if(l2flag!=null){//       
    				resultflag.val=l1flag.val+l2flag.val+num;
    				if(resultflag.val>=10){
    					num=1;
    					resultflag.val-=10;
    				}else{
    					num=0;
    				}
    				l1flag=l1flag.next;
    				l2flag=l2flag.next;
    				if(l2flag!=null||l1flag!=null||num!=0)
    					resultflag.next=new ListNode(0);
    				resultflag=resultflag.next;
    			}
    		}
    		while(l2flag!=null){//l1flag  l2flag   
    			resultflag.val=l2flag.val+num;
    			num=0;
    			if(resultflag.val>=10){
    				num=1;
    				resultflag.val-=10;
    			}
    			l2flag=l2flag.next;
    			if(l2flag!=null||num!=0)
    				resultflag.next=new ListNode(0);
    			resultflag=resultflag.next;	
    		}
    		if(l1flag==null&&l2flag==null&&num!=0){//        10    
    			resultflag.val=num;
    			num=0;
    		}
    		return result;
        }

    みんなを助けることができることを望んで、みんなもそれぞれの解法を評論することを歓迎して、私達はいっしょに勉強します