//给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
// 示例 1:
//输入: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]
public class Test2 {
public static void main(String[] args) {
ListNode l11 = new ListNode(3);
ListNode l12 = new ListNode(8);
ListNode l13 = new ListNode(9);
l11.next = l12;
l12.next = l13;
ListNode l21 = new ListNode(4);
ListNode l22 = new ListNode(6);
l21.next = l22;
System.out.println(joinLinkList(l11));
System.out.println(joinLinkList(l21));
System.out.println(joinLinkList(addTwoListNode(l11,l21)));
}
public static ListNode addTwoListNode( ListNode l1 , ListNode l2){
// 先排除特殊情况(3种)
if( l1 == null && l2 == null){return null;}
if( l1 == null){ return l2; }
if( l2 == null){ return l1; }
//创建头节点
ListNode head = new ListNode(0);
//创建指针,指向头节点
ListNode cur = head;
while (true) {
// l1 + l2 的数值赋值给 指针
if (l1 != null) {
cur.val += l1.val;
l1 = l1.next;
}
if (l2 != null) {
cur.val += l2.val;
l2 = l2.next;
}
// 超过10进1,将进位值赋值给指针的另一个节点,等待下次运算
cur.next = new ListNode(cur.val / 10);
// 头节点的数值就是两数相加的个位数
cur.val = cur.val % 10;
//结束操作,当l1,l2都没有数值的时候,下一位数值就是进位值(cur.next)
if (l1 == null && l2 == null) {
//判断有没有进位值
cur.next = cur.next.val == 0 ? null : cur.next;
break;
}
// 指针指向另一个节点(保留进位值),再重复操作
cur = cur.next;
}
return head;
}
public static String joinLinkList( ListNode ln){
ListNode temp = ln;
StringBuilder bd = new StringBuilder();
while ( temp != null){
bd.append(temp.val);
if( temp.next != null){
bd.append( " -> ");
}
temp = temp.next;
}
return bd.toString() ;
}
}
class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}