题解 | #两个链表生成相加链表#
两个链表生成相加链表
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
反转链表模拟进位加法
反转链表是为了符合进位加法
思想
使用一个整形常量add来保存进位(0或1),通过不断移动指针获取参与加法的更高位。
构建结果链表使用头插法
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
ListNode a = reverse(head1);
ListNode b = reverse(head2);
int carry = 0; //保存进位
ListNode ans = null;
while(a != null || b != null || carry == 1){
int sum = (a == null ? 0 : a.val) + (b == null ? 0 : b.val) + carry;
carry = sum / 10; // 更新进位
ListNode dump = new ListNode(sum % 10);
dump.next = ans;
ans = dump;
if(a != null) a = a.next;
if(b != null) b = b.next;
}
return ans;
}
/**
* 反转链表
*/
public ListNode reverse(ListNode root){
ListNode temp = null;
while(root != null){
ListNode d = root.next;
root.next = temp;
temp = root;
root = d;
}
return temp;
}
}