题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
题目已经说两个链表非空则不考虑空的情况
题目说数字是按逆序的方式
则将链表逐步相加即可
直到两个链表均为空
第一次解题代码(错误)
/**
* 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) {
// 题目已经说两个链表非空则不考虑空的情况
// 题目说数字是按逆序的方式
// 则将链表逐步相加即可
// 直到两个链表均为空
// 当其中一个链表为空时候,注意是否有进位
// 设本位和进位均为0
int ben=0,jin=0;
// 存储两链表之和
ListNode list=new ListNode();
ListNode node=list;
while(l1!=null||l2!=null){
ben=jin;
if(l1!=null){
ben+=l1.val;
}
if(l2!=null){
ben+=l2.val;
}
// System.out.println(ben%10);
node.next=new ListNode(ben%10);
node=node.next;
jin=ben/10;
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
node.next=null;
return list.next;
}
}
在第一次错误的代码的修改上
错误原因:未考虑到最后一位产生进位
/**
* 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) {
// 题目已经说两个链表非空则不考虑空的情况
// 题目说数字是按逆序的方式
// 则将链表逐步相加即可
// 直到两个链表均为空
// 当其中一个链表为空时候,注意是否有进位
// 设本位和进位均为0
int ben=0,jin=0;
// 存储两链表之和
ListNode list=new ListNode();
ListNode node=list;
//链表结点依次相加
while(l1!=null||l2!=null){
ben=jin;
//如果第一个链表的结点不为空
if(l1!=null){
ben+=l1.val;
}
//如果第二个链表的结点不为空
if(l2!=null){
ben+=l2.val;
}
//保存本位
node.next=new ListNode(ben%10);
node=node.next;
//记录进位
jin=ben/10;
//如果l1,l2当前的结点不为空,则遍历下一个
if(l1!=null)
l1=l1.next;
if(l2!=null)
l2=l2.next;
}
// node.next=null;
//关键点:错误原因,未考虑到最后产生了新的进位
if(jin==1){
node.next=new ListNode(jin);
node=node.next;
}
node.next=null;
return list.next;
}
}
关键点
//关键点:错误原因,未考虑到最后产生了新的进位
if(jin==1){
node.next=new ListNode(jin);
node=node.next;
}