LeetCode: 2.Add Two Numbers
题目要求:给定两个非空的链表,且链表里的元素都是非负整数,对这两个链表里的元素进行相加,返回一个新的链表。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
思考过程:第二个元素进行相加:4+6=10,只保留了个位上的数,原本进位到十位的1加到第三个元素之和上了。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 public class Solution { 10 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 11 ListNode c1 = l1; 12 ListNode c2 = l2; 13 ListNode sentinel = new ListNode(0); 14 ListNode d = sentinel; 15 int sum = 0; 16 //当两个链表的next均不为null时 17 while (c1 != null || c2 != null) { 18 //将进位累加到下一个元素和 19 sum /= 10; 20 if (c1 != null) { 21 sum += c1.val; 22 c1 = c1.next; 23 } 24 if (c2 != null) { 25 sum += c2.val; 26 c2 = c2.next; 27 } 28 //只保留个位上的数 29 d.next = new ListNode(sum % 10); 30 d = d.next; 31 } 32 //如果最后一对元素之和大于10,将进位1直接给下一个节点 33 if (sum / 10 == 1) 34 d.next = new ListNode(1); 35 return sentinel.next; 36 } 37 }