1. 程式人生 > >兩個連結串列相加的和445. Add Two Numbers II

兩個連結串列相加的和445. Add Two Numbers II

題目:

You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    /*
    解題思路:將連結串列存入集合中,然後相加即可,定義一個變數flage記錄進位
    */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode result=new ListNode(0);//頭結點
        LinkedList<Integer> list1=new LinkedList<Integer>();
        LinkedList<Integer> list2=new LinkedList<Integer>();
        while(l1!=null){
            list1.add(l1.val);
            l1=l1.next;
        }//while
        while(l2!=null){
            list2.add(l2.val);
            l2=l2.next;
        }//while
        int flage=0;
        //頭插法建立連結串列,集合是先進後出的方式
        while(list1.size()!=0&&list2.size()!=0){
            int num=list1.removeLast()+list2.removeLast()+flage;
            flage=num/10;
            num=num%10;
            ListNode temp=new ListNode(num);
            temp.next=result.next;
            result.next=temp;
        }//while
        while(list1.size()!=0){
            int num=list1.removeLast()+flage;
            flage=num/10;
            num=num%10;
            ListNode temp=new ListNode(num);
            temp.next=result.next;
            result.next=temp;
        }
        while(list2.size()!=0){
            int num=list2.removeLast()+flage;
            flage=num/10;
            num=num%10;
            ListNode temp=new ListNode(num);
            temp.next=result.next;
            result.next=temp;
        }
        //考慮進位的時候,兩個集合均為空的情況,例如{5}  {5}相加之後需要進位1
        if(flage!=0){
            ListNode temp=new ListNode(flage);
            temp.next=result.next;
            result.next=temp;
        }
        return result.next;
    }
}