题目描述:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
仔细看题,原链表中的数字是倒着排的,结果链表中的数字也需要倒着排,所以在构建结果链表时 使用尾插法
java代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode(0);
ListNode r2 = result;//r2 来指向结果链表尾结点
int addnum = 0;// 加法进位数字
if(l1.next == null && l2.next == null){
r2.next = new ListNode((l1.val+l2.val)%10,null);
r2 = r2.next;
if((l1.val+l2.val) < 10){
return result.next;
}
r2.next = new ListNode(1);
r2 = r2.next;
return result.next;
}
ListNode a = l1;
ListNode b = l2;
while(a != null || b != null){
int anum = 0;
int bnum = 0;
if(a != null){
anum = a.val;
}
if(b != null){
bnum = b.val;
}
addnum = addnum + anum + bnum;
if(addnum < 10){//不进位情况
r2.next = new ListNode(addnum,null);
r2 = r2.next;
addnum = 0;
}
if(addnum >= 10){//进位情况
r2.next = new ListNode(addnum%10,null);
r2 = r2.next;
addnum = 1;
}
if(a != null){
a = a.next;
}
if(b != null){
b = b.next;
}
}
if(addnum == 1){// 如果还没进位完,那就在添加一个尾结点
r2.next = new ListNode(1);
}
return result.next;
}
}