You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Constraints:
- The number of nodes in each linked list is in the range
[1, 100]
. 0 <= Node.val <= 9
- It is guaranteed that the list represents a number that does not have leading zeros.
Solutions:
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
{
ListNode resultNode = new ListNode(-1);
ListNode curNode = resultNode;
int carry = 0;
while (l1 != null || l2 != null)
{
int d1 = l1 == null ? 0 : l1.val;
int d2 = l2 == null ? 0 : l2.val;
int sum = d1 + d2 + carry;
carry = sum >= 10 ? 1 : 0;
curNode.next = new ListNode(sum % 10);
curNode = curNode.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (carry == 1) curNode.next = new ListNode(1);
return resultNode.next;
}
Results:
解题思路:
本题主要考察的是链表(LinkList)-- 先进先出,可以看到,本题只需要将两个链表相加然后将结果倒序即可:
1. 定义carry,表示每次相加的结果是否有进位
2. d1和d2两个变量表示两个链表上当前的值
3. curNode即存储每次相加的结果
4. while循环依次遍历两个链表,直到两个链表到为null