题解 | #两个链表生成相加链表#
两个链表生成相加链表
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
参考其他题解给出的反转链表方法的进一步优化,引入了一些边界情况的处理
public class Solution { public static ListNode ReverseList(ListNode pHead) { ListNode res = null; ListNode cur = pHead; while(cur != null){ ListNode temp = cur.next; cur.next = res; res = cur; cur = temp; } return res; } /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ public ListNode addInList (ListNode head1, ListNode head2) { // write code here ListNode l1 = ReverseList(head1);//翻转链表l1 ListNode l2 = ReverseList(head2);//翻转链表l2 ListNode h1 = l1, h2 = l2, part = null, res = null;// 用于返回的链表 int sum, carry = 0; while(l1 != null && l2 != null){ sum = l1.val + l2.val + carry;//当前这一位的总和 carry = sum / 10;//查看当前加和是否有进位 l1.val = l2.val = sum % 10; l1 = l1.next; l2 = l2.next; } //根据两两相加截止和进位情况计算 if (l1 == null && l2 == null) { res = h2; part = l2; if (carry > 0) part = new ListNode(carry); } else { if (l1 == null) { res = h2; part = l2; } else { res = h1; part = l1; } while (carry > 0 && part != null) { int ssum = part.val + carry; part.val = ssum % 10; carry = ssum / 10; part = part.next; } if (carry > 0) { part = new ListNode(carry); } } return ReverseList(res); } }