2. 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果将这两个数相加起来,则会返回一个新的链表来表示它们的和。
可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*///java 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//初始化一个预先指针ListNode pre = new ListNode(0);ListNode current = pre;//进位标记int temp_num = 0;//遍历两个链表while(l1 != null || l2 != null){//得到两个链表中的值int x = l1 == null ? 0 : l1.val;int y = l2 == null ? 0 : l2.val;//数值相加int sum = x + y + temp_num;//进位值变化temp_num = sum / 10;//实际值存入链表sum = sum % 10;//添加新节点并移动l1,l2,currentcurrent.next = new ListNode(sum);current = current.next;if (l1 != null){l1 = l1.next;}if (l2 != null){l2 = l2.next;}}//两条链表遍历结束,进位如果为1,则添加新的节点if (temp_num == 1){current.next = new ListNode(temp_num);current = current.next;}//返回预指针指向后续的内容//使用预先指针的目的在于链表初始化时无可用节点值,而且链表构造过程需要指针移动,进而会导致头指针丢失,无法返回结果return pre.next; }
}