Add Two Numbers

来源:互联网 发布:乐心手环数据清零几点 编辑:程序博客网 时间:2024/05/17 03:51
Add Two Numbers 

You are given two linked lists representing two non-negative numbers. The digits are 

stored in reverse order and each of their nodes contain a single digit. Add the two numbers

 and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

首先十进制加法应该注意进位的处理,因为两个链表长度有可能不等长!

因此这道题还要考虑边界和异常条件的处理。

public class Solution {public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {if (l1 == null && l2 == null)return null;/* * 在java中,基本类型变量是传值的副本,对象型变量是传引用的副本,一次ret,ll操作的是同一内存, * ll用来指示链表的头结点地址 */ListNode ll =null;ListNode ret=ll;int carry = 0;int l1_val = 0;int l2_val = 0;while (l1 != null || l2 != null ) {l1_val = (null == l1) ? 0 : l1.val;l2_val = (null == l2) ? 0 : l2.val;int add = l1_val + l2_val + carry;ListNode n=new ListNode(add % 10);if(ll==null){ll=n;ret=n;}else{ret.next=n;ret=n;}carry = add/10;if (null != l1)l1 = l1.next;if (null != l2)l2 = l2.next;}if (l1 == null && l2 == null && carry!= 0){ListNode n = new ListNode(carry);            ret.next = n;}return ll;}public static void main(String[] args) {        ListNode l1 = new ListNode(2);        ListNode x2 = new ListNode(4);        ListNode x3 = new ListNode(3);        l1.next = x2;        x2.next = x3;                 ListNode l2 = new ListNode(5);        ListNode y2 = new ListNode(6);        ListNode y3 = new ListNode(4);        l2.next = y2;        y2.next = y3;                 ListNode ret = addTwoNumbers(l1, l2);        while(ret!=null&&ret.next!=null){        System.out.print(ret.val+"->");        ret=ret.next;        }        if(ret!=null)        System.out.print(ret.val);    }


0 0
原创粉丝点击