给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
思路同时遍历两个链表,创建一个新链表,链表中的每个元素为两个链表的和。
技巧:
-
先定义新链表的头节点ListNode dumpy
-
在定义一个循环新链表的变量 cur
-
两个链表逐一相加,转化成分别和sum相加,因为可能出现两个链表不一样长的情况
-
用加完的结果创建一个新的节点,如果进位的话,提前将sum置1
-
在彻底循环完两个链表有可能出现在最后一位出现进位的情况,我们判断如果sum==1在在创建一个节点
-
最后返回不包括头结点 dumpy.next
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dumpy =new ListNode(0); //合成的新链表 int sum=0; ListNode cur = dumpy; //循环链表的变量 ListNode p1=l1; ListNode p2 =l2; while(p1 !=null || p2 != null){ if(p1 !=null) { sum +=p1.val; p1 =p1.next; } if(p2 !=null) { sum +=p2.val; p2 =p2.next; } cur.next =new ListNode(sum%10); sum/=10; cur =cur.next; } if(sum ==1){ cur.next =new ListNode(1); } return dumpy.next; } }