给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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]
package com.company.LeetCode.twomul;
/*
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储
一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
*/
public class ListNode {
int val;
ListNode next;
public static void main(String[] args){
//创建链表l1
ListNode l1 = new ListNode(9);
l1.add(9);
l1.add(9);
l1.add(9);
l1.add(9);
l1.add(9);
l1.add(9);
//创建链表l2
ListNode l2 = new ListNode(9);
l2.add(9);
l2.add(9);
l2.add(9);
//调用方法
Solution4 sss=new Solution4();
ListNode l3=sss.addTwoNumbers(l1,l2);
//输出l3
l3.print();
}
//链表方法
ListNode head;
ListNode(int val) {
this.val = val;
}
//链表赋值方法
public void add(int newval) {
ListNode newNode = new ListNode(newval);
if(this.next == null)
this.next = newNode;
else
this.next.add(newval);
}
// 打印链表方法
public void print() {
System.out.print(this.val);
if(this.next != null)
{
System.out.print("-->");
this.next.print();
}
}
}
class Solution4 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int sum =0;
ListNode l3 = null;//结果链表
ListNode l11 = l1;
ListNode l22 = l2;
while(true){
//将更长的链表中无法相加的部分赋值给结果链表
if(l11==null){
l3=l2;
break;
}
if(l22==null){
l3=l1;
break;
}
//相加、赋值、进行下一个节点的运算
if(l11!=null||l22!=null){
sum=l11.val+l22.val;
l11.val=sum;
l22.val=sum;
l11=l11.next;
l22=l22.next;
}
}
ListNode l33 = l3;
//链表相加>9时进一位,在这里也可以不用该变量
//int flag=0;
while (true){
if(l33.next==null){
if(l33.val>9){//最后一个数进位
l33.val=l33.val%10;
//由于多出来一位为空,故不能直接l33.next.val+=1;
ListNode head = new ListNode(1);
l33.next = head;//赋类型为ListNode的1
}
break;
}else{
if(l33.val>9){
l33.val=l33.val%10;//节点值<9
l33.next.val+=1;//进位
}
l33=l33.next;//进入下一个节点运算
}
}
return l3;
}
}
结果为: