[题目链接](剑指 Offer II 025. 链表中的两数相加)
思路先把相加的两个整数单链表进行反转,再相加。 反转链表可看[第24题](剑指 Offer II 024. 反转链表_WoAiChiXueGao_的博客-CSDN博客)。再将相加的结果进行反转相加的过程中注意进位什么的。 代码
class Solution { public ListNode reverseList(ListNode head) { ListNode last = null; ListNode node = head; while(node != null) { ListNode next = node.next; node.next =last; last = node; node = next; } //不返回node的原因时,此时的node为null return last; } public ListNode add(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0);; ListNode sumNode = dummy; int carry = 0; while(l1 != null || l2 != null) { int num1 = l1 == null ? 0 : l1.val; int num2 = l2 == null ? 0 : l2.val; int sum = num1 + num2 + carry; carry = sum >= 10 ? 1 : 0; // 看是否有进位 sum = sum >= 10 ? sum-10 : sum; ListNode node = new ListNode(sum); sumNode.next = node; sumNode = sumNode.next; l1 = l1 == null ? null : l1.next; l2 = l2 == null ? null : l2.next; } if(carry > 0) { sumNode.next = new ListNode(carry); } return dummy.next; } public ListNode addTwoNumbers(ListNode l1, ListNode l2) { l1 = reverseList(l1); l2 = reverseList(l2); ListNode sumNode = add(l1, l2); ListNode ans = reverseList(sumNode); return ans; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)