2_Add Two Number

来源:互联网 发布:p2p网贷系统源码由来 编辑:程序博客网 时间:2024/06/17 21:48

一、题目


题目描述:

传入2个链表,比如2->4->3其实表示的是342,5->6->4其实表示的是465,将2个链表相加,也就是342+465=807,然后将807反转为链表7->0->8。其实就是大数相加问题。



二、解决

思路:通过2个链表同时扫描,用大数相加的方法,c表示进位,num表示当前的值,从头扫描到最后

public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {int num = l1.val + l2.val;int c = 0;if (num > 9){    c = num / 10;    num %= 10;} ListNode current = new ListNode(num);ListNode result = current;l1 = l1.next;l2 = l2.next;while (l1!=null && l2!=null){num = l1.val + l2.val + c;if (num > 9){c = num / 10;num %= 10;} else {c = 0;}ListNode temp = new ListNode(num);current.next = temp;current = current.next;l1 = l1.next;l2 = l2.next;}while (l1 != null){num = l1.val + c;if (num > 9){c = num / 10;num %= 10;} else {c = 0;}ListNode temp = new ListNode(num);current.next = temp;current = current.next;l1 = l1.next;} while (l2 != null){num = l2.val + c;if (num > 9){c = num / 10;num %= 10;} else {c = 0;}ListNode temp = new ListNode(num);current.next = temp;current = current.next;l2 = l2.next;}if (c != 0){ListNode temp = new ListNode(c);current.next = temp;current = current.next;}return result;    }





0 0