兩數相加

思路:

取出鏈表對應結點的值,相加結果存到新鏈表對應的結點,由於每個結點只存一位數,而相加結果有可能是兩位,因此需要進位,每次相加時將進位加入計算。

具體如下:

創建兩個結點用來分別遍歷兩個鏈表,都指向對應鏈表的首結點。
創建新鏈表存放結果,初始化值爲0,創建一個結點用來存放每次的結果,
1)遍歷兩鏈表,直到兩鏈表都爲空:
a:取出兩鏈表的值與進位carry相加爲sum,該值可能大於10,因此用carry保存每次相加的結果的進位進位值carry=sum/10,
b:將sum的個位(sum%10)存入新鏈表中下一個結點(這樣,提前創建了新的結點,新鏈表前移時就不會報空指針異常)
c:用於遍歷的兩個結點前進一步。
d: 新鏈表也前進一步。
2)最後,遍歷結束,判斷carry是否爲0,若不爲0,則將carry的值存入新鏈表的下一個結點。

參考代碼:

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode cur1=l1;
        ListNode cur2=l2;
        ListNode result=new ListNode(0);
        ListNode cur=result;
        int carry=0;
        int x=0;
        int y=0;
        int sum=0;
        while(cur1!=null||cur2!=null){
            if(cur1!=null){
                x=cur1.val;
            }else{
                x=0;
            }
            if(cur2!=null){
                y=cur2.val;
            }else{
                y=0;
            }
            sum=x+y+carry;
            carry=sum/10;
            cur.next=new ListNode(sum%10);
            cur=cur.next;
            if(cur1!=null){
                cur1=cur1.next;
            }
            if(cur2!=null){
                cur2=cur2.next;
            }
        }
        if(carry!=0){
            cur.next=new ListNode(carry);
        }

        return result.next;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章