leetcode 2:Add Two Numbers

来源:互联网 发布:中国铁塔 网络强国 编辑:程序博客网 时间:2024/04/26 18:16

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 ListNode addTwoNumbers (ListNode l1,ListNode l2) {        ListNode l3 = null;//最终的结果        ListNode r = null;        int carry = 0;        //1:首先算一下两个链表都不为空时的情况。        while (l1 != null && l2 != null) {            int value = l1.val + l2.val + carry;            if (value >= 10) {                value = value % 10;                carry = 1;            } else {                carry = 0;            }            //将得到的结果链接到l3的链表下            if (l3 == null) {                l3 = r = new ListNode(value);            } else {                r = r.next = new ListNode(value);            }            l1 = l1.next;            l2 = l2.next;        }        //2:当我们两个链表中有一个是空的时候,说明我们算完了,开始后续的进位操作        //如果我们没有进位那么问题就会很简单        if (carry == 0) {            if (l1 != null) {                r.next = l1;            } else {                r.next = l2;            }        } else {//如果有进位就得再继续做            if (l1 != null) {                while (carry != 0 && l1 != null) {                    int value = (l1.val + carry);                    if (value >= 10) {                        value = value % 10;                        carry = 1;                    } else {                        carry = 0;                    }                    r = r.next = new ListNode(value);                    l1 = l1.next;                }                //什么时候不进位了,直接将最后的链表连过来                if (carry == 0) {                    r.next = l1;                } else {                    r.next = new ListNode(carry);//别忘了如果最后一位有进位要把进位加进来                }            } else {                while (l2 != null) {                    int value = (l2.val + carry);                    if (value >= 10) {                        value = value % 10;                        carry = 1;                    } else {                        carry = 0;                    }                    r = r.next = new ListNode(value);                    l2 = l2.next;                }                if (carry == 0) {                    r.next = l2;                } else {                    r.next = new ListNode(carry);                }            }        }        return l3;    }

感觉自己好菜啊,写出的代码这么low,呜呜呜

0 0