链式A+B

题目来源:

牛客网--程序员面试金典

题目描述

有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

代码:

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Plus {
    ListNode head = null;
    ListNode result = null;
    public ListNode plusAB(ListNode a, ListNode b) {
        // write code here
        int flag = 0;
        while(a != null && b != null){
            
            insert((a.val + b.val+flag)%10);
            flag = (a.val + b.val+flag)/10;
            a = a.next;
            b = b.next;
           
            
        }
       //当进行到最后一位时,还有进位,需要增加一个新的出来把这个进位存储起来
        if((a==null)&&(b==null)&&(flag == 1)){
            insert(flag);
            
        }
        if(a== null){
            while(b != null){
                insert((b.val+flag)%10);
                flag = ( b.val+flag)/10;
                b = b.next;
            }
        }
        if(b==null){
             while(a != null){
                insert((a.val+flag)%10);
                 flag = (a.val +flag)/10;
                a = a.next;
            }
        }
        
        
        return head;
    }
    public void insert(int val){
        ListNode node = new ListNode(val);
        if(head == null){
            head = node;
            result = node;
        }else{
            result.next = node;
            result = node;
        }
    }
    
}

你可能感兴趣的:(链式A+B)