You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Source
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode h1 = l1, h2 = l2;
ListNode p = null, h3 = null;
int carry = 0;
while(h1 != null || h2 != null){
ListNode t = new ListNode(0); //创建新节点 最好不要用h3
int x1 = (h1 == null ? 0 : h1.val);
int x2 = (h2 == null ? 0 : h2.val);
int temp = (x1 + x2 + carry) % 10;
carry = (x1 + x2 + carry) / 10;
t.val = temp;
if(p == null) //头结点存值 假如头结点不存这些数据可以不分别处理 最后返回p.next
{
p = t;
h3 = t;
}
else
{
h3.next = t;
h3 = t;
}
if(h1 != null) h1 = h1.next; //凡是指针后移就要判断边界
if(h2 != null) h2 = h2.next;
}
if(carry == 1) h3.next = new ListNode(1);
return p;
}
}
Test
<span style="font-size:14px;"> public static void main(String[] args){
ListNode l1 = new ListNode(1);
l1.next = new ListNode(8);
ListNode l2 = new ListNode(0);
ListNode l3 = new Solution().addTwoNumbers(l1, l2);
while(l3 != null){
System.out.print(l3.val);
System.out.println();
l3 = l3.next;
}
}</span>