洛阳做网站推广,做五金有哪些网站推广,安徽省交通运输厅章义,天长街道两学一做网站给你两个 非空 的链表#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的#xff0c;并且每个节点只能存储 一位 数字。
请你将两个数相加#xff0c;并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外#xff0c;这两个数都不会以 0 …给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。
请你将两个数相加并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外这两个数都不会以 0 开头。 其本质即为两个数字逆着相加第一个数字为个位第二个数字为十位依次类推
//以传入[1,2,3]和[5,8,9]为例
public class Solution {public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
//进行节点初始化ListNode head null,tail null;
//carry为进位数值int carry 0;
//如果传入链表不为空则进行相加循环while(l1 !null || l2 ! null){
//如果传入链表不为空则获取首个(当前循环中的“个位”)
//第一次为n1 1,n2 5
//第二次为n1 2,n2 8
//第三次位n1 3,n2 9int n1 l1! null ? l1.val :0;int n2 l2 ! null ? l2.val :0;
//求当前两个首节点的和且加入进位
//第一次为15 6
//第二次为28 10
//第三次位391 13int sum n1 n2 carry;
//head首次进入将首节点和末节点传入第一次sum取余且指向同一个对象则后面对tail做修改head也会变
//此时head为[6]tail为[6]if(head null){head tail new ListNode(sum %10);}
//第二次之后进入elseelse {
//第二次此处tail为[6,0]head为[6,0]
//第三次此处tail为[0,3]head为[6,0,3]tail.next new ListNode(sum%10);
//第二次此处tail为[0]head为[6,0]
//第三次此处tail为[3]head为[6,0,3]tail tail.next;}
//对sum做对10的除法获得十位数字
//第二次为1
//第三次为1carry sum/10;
//如果此时传入的l1或l2还有数值则去除前一个节点而后进入循环if(l1 ! null){l1 l1.next;}if(l2 ! null){l2 l2.next;}}
//循环结束后如果结果超过本来的数组长度则加上一位
//即在tail后加入最大的一位数组为最后一次sum对10取余if(carry 0){
//这里为什么不是head.next
//是因为head此时为头指针指向6头指针的后一个为[0,3],如果修改则变为[6,1]
//而改tailhead则变为[6,0,3,1]tail.next new ListNode(carry);}return head;}
}