题解 | #两个链表生成相加链表#
两个链表生成相加链表
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; } }