题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,
并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/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) {
/*
非空(重点)
链表
非负
逆序(重点)
每个节点对应一个数字
相加
返回链表
*/
ListNode list=new ListNode();
ListNode node=list;
int co=0,so=0;
while(l1!=null||l2!=null){
co=so;
if(l1!=null){
// 注意是+=
co+=l1.val;
}
if(l2!=null){
co+=l2.val;
}
so=co/10;
co%=10;
node.next=new ListNode(co);
node=node.next;
if(l1!=null){
l1=l1.next;
}
if(l2!=null){
l2=l2.next;
}
}
if(so!=0){
node.next=new ListNode(so);
}
return list.next;
}
}