noaman_wgs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

【题目】

题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

【代码】

1 使用递归

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Plus {
    public ListNode plusAB(ListNode a, ListNode b) {
        if (a == null)
            return b;
        if (b == null)
            return a;
        
        return plusAB(a, b, 0);        
    }
    
    public ListNode plusAB(ListNode a, ListNode b, int sum) {
        if (a == null && b == null && sum == 0){
            return null;
        }
        if (a != null){
            sum += a.val;
        }
        if (b != null){
            sum += b.val;
        }
        
        ListNode tempNode = new ListNode(sum % 10);
        
        a = a == null ? null: a.next;
        b = b == null ? null: b.next;
        tempNode.next = plusAB(a, b , sum / 10);
        
        return tempNode;
        
        
    }
}

 

2 常规方法

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Plus {
    public ListNode plusAB(ListNode a, ListNode b) {
        if (a == null)
            return b;
        if (b == null)
            return a;
        
        ListNode plusNode = new ListNode(-1);      
        ListNode plusHead = plusNode;
        
        int shi = 0;
        int ge = 0;
        int sum = 0;
         int aVal = 0;
         int bVal = 0;
        while (a != null || b != null || shi != 0){
            
            aVal = a==null ? 0 : a.val;
            bVal = b==null ? 0 : b.val;
            //每次需要加上进位值
            sum = aVal + bVal + shi;
            //进位,若sum为个位,则进位值为0
            shi = sum / 10;
            ge = sum % 10;
            
            ListNode tempNode = new ListNode(ge);      
            plusNode.next = tempNode;
            plusNode = plusNode.next;
            
            a = a==null ? null : a.next;
            b = b==null ? null : b.next;
            
        }
        return plusHead.next;
        
        
        
        
        
        
    }
    
}

 

posted on 2017-06-16 11:31  noaman_wgs  阅读(245)  评论(0编辑  收藏  举报