[データ構造とアルゴリズム] Jianzhi Offer II 025. リンクされたリストに 2 つの数値を追加する

リンク:
タイトル:
2 つの非負の整数を表す、2 つの空ではないリンク リスト l1 および l2 が与えられます。数値の最上位桁は、リンクされたリストの先頭にあります。各ノードには 1 桁だけが保存されます。これらの数値を追加すると、新しいリンクされたリストが返されます。

どちらの数字も、0 以外のゼロで始まることはないと考えられます。
ここに画像の説明を挿入


問題解決:
スタックを使用してリンク リストの値を保存します。
また、2つの数を足した余りは一の位、約数は十の位となります。

class Solution {
    
    
public:
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
    
    
        // write code here
        stack<int> s1;
        stack<int> s2;
        stack<int> result;
        while(head1){
    
    
            s1.push(head1->val);
            head1=head1->next;
        }
        while(head2){
    
    
            s2.push(head2->val);
            head2=head2->next;
        }
       
        
        int high=0;//进位
        while(!s1.empty()||!s2.empty()||high!=0){
    
    
            int a=0;
            int b=0;
            if(s1.empty()){
    
    
                a=0;
            }else{
    
    
                a=s1.top();s1.pop();
            }

            if(s2.empty()){
    
    
                b=0;
            }else{
    
    
                b=s2.top();s2.pop();
            }
            int low=(a+b+high)%10;
            high=(a+b+high)/10;
           
            
            result.push(low);
        }
        ListNode* dhead=new ListNode(-1);
        ListNode* cur=dhead;
        while(!result.empty()){
    
    
            cur->next=new ListNode(result.top());
            cur=cur->next;
            result.pop();
        }
        return dhead->next;
    }
};

おすすめ

転載: blog.csdn.net/ryanji/article/details/127623576