leetcode解题方案--002--AddTwoNumbers

来源:互联网 发布:吉他软件效果器正版 编辑:程序博客网 时间:2024/05/21 07:11

题目

You are given two non-empty linked lists representing two non-negative integers. 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.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

解析

这道题的难度不大,主要的点在于

  • 数组为空直接返回
  • 要考虑进位
  • 进位后可能创建新节点,比如两个单节点 5 + 5 = 0->1
  • 提高效率的方法是当有一个链表到达结尾时,无需再次遍历(有进位除外)
  • 最后只剩下一个链表时,只要进位为0,就可以不再循环后续数组
class Solution {        public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {            ListNode src = l1;            if (l1 == null ) {                return l2;            }            if (l2 == null) {                return l1;            }            int ceil = 0;            while (l1.next!=null) {                if (l2.next!=null) {                    int sum = l1.val+l2.val+ceil;                    l1.val = sum%10;                    ceil = sum / 10;                } else {                    break;                }                l2 = l2.next;                l1 = l1.next;            }            int sum = l1.val+l2.val+ceil;            l1.val = sum%10;            ceil = sum / 10;            if (l2.next!=null) {                l1.next = l2.next;            }            if (ceil == 0) {                return src;            } else {                while (l1.next!=null) {                    int sum1 = l1.next.val+ceil;                    l1.next.val = sum1%10;                    ceil = sum1/10;                    l1 = l1.next;                }                if (ceil!=0) {                    l1.next = new ListNode(ceil);                }                return src;            }        }}

运行时间:52ms

原创粉丝点击