给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
思考过程:
1、怎么样从链表获取数据,用delete方法获取,这里要增加按照获取的先后,乘以10的次方。
2、获取后两个链表的和相加,得到一个新值,这个新值怎么样放到新的链表中去。
所以这个api的设计是这样:
属性/方法名 | 说明 |
---|---|
Clas Node ; Node head; | 定义链表元素 定义头节点 |
add(int element) | 增加元素(每次都在head节点后面,其他节点前面) |
getSum() | 给定一个这样的链表,如何求值 |
putSum() | 给定一个int类型的值,如何把他放进链表 |
方法的实现:
1、属性
class Node{ int element; Node next; } Node head;
2、方法
//构造方法
public LinkAdd(){ this.head = new Node(); this.head.element = 1000; this.head.next = null; } //add方法 public void add(int element){ Node newNode = new Node(); newNode.element = element; newNode.next = this.head.next; head.next = newNode; } public Node delete(){ Node deleted=null; if(this.head.next!=null){ deleted=this.head.next; } this.head.next = deleted.next; return deleted; } public Integer getSum(){ int sum = 0; int i = 0; int multi; Node checkNode = head.next; while(checkNode!=null){ multi = 1; int temp = (int)checkNode.element; for(int j = 0 ; j < i; j++) multi*=10; sum += temp*multi; i++; checkNode = checkNode.next; } return sum; }
putSum方法,这里我借用了《算法》的jar包,直接用了里面的stack API,谢谢segwicky。
public void putSum(int sum){ Stack<Integer> stack = new Stack<>(); while(sum>0) { stack.push(sum % 10); sum /= 10; } while(!stack.isEmpty()) add((int)stack.pop()); }
3、测试方法
public static void main(String[] args) { LinkAdd list1 = new LinkAdd(); list1.add(9); list1.add(9); list1.add(9); list1.add(9); list1.add(9); list1.add(9); list1.add(9); int sum = list1.getSum(); LinkAdd list2 = new LinkAdd(); list2.add(9); list2.add(9); list2.add(9); list2.add(9); int sum2 = list2.getSum(); int sum3 = sum + sum2; System.out.println(sum3); LinkAdd list3 = new LinkAdd(); list3.putSum(sum3); Node temp = list3.head.next; while(temp!=null){ System.out.println(temp.element); temp = temp.next; } }
4、测试结果
10009998
8
9
9
9
0
0
0
1