美文网首页
LeetCode2-两数列相加(中等)

LeetCode2-两数列相加(中等)

作者: jiapengcai | 来源:发表于2018-04-26 13:22 被阅读0次

原题

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.
Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

翻译

给定两个非空链表来表示两个非负整数列。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数列都不会以零开头。
示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

答案

/**
 * 定义单向链表
 */
class ListNode {
     int val;
     ListNode next;
     ListNode(int x) {
         val = x;
     }
 }

 /**
  * 算法思想:
  * 1. 定义一个虚链头dummyHead,其next值指向方法返回链表的第一个节点
  * 2. 定义一个游标curr,代表当前节点,每生成一个新节点就指向下一个
  * 3. 由于满10进1,所以定义一个整数保存l1和l2对应节点值的10的倍数,用于进位
  * 4. 当l1当前节点不为空或l2当前节点不为空时
  *    a. 取出各自节点的值x, y,若为空则设为0
  *    b. 计算x, y的和sum
  *    c. 计算进位值carry
  *    d. 对sum取余算出新节点的值,curr的next指向该新节点
  *    e. 若l1不为空,则l1指向下一个节点;同理作用于l2
  * 5. 若最后的进位值大于0,则再新建一个节点,curr的next指向该新节点
  * 6. 返回虚链头dummyHead的下一个节点
  */
public class AddTwoNumbers {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummyHead = new ListNode(0);
        ListNode curr = dummyHead;
        int carry = 0;
        while (l1 != null || l2 != null) {
            int x = (l1 != null ? l1.val : 0);
            int y = (l2 != null ? l2.val : 0);
            int sum = carry + x + y;
            carry = sum / 10;
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            if (l1 != null) {
                l1 = l1.next;

            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        if (carry > 0) {
            curr.next = new ListNode(carry);
        }
        return dummyHead.next;
    }
}

相关文章

  • LeetCode2-两数列相加(中等)

    原题 You are given two non-empty linked lists representing ...

  • 003、两数相加(中等难度)

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 2.两数相加(中等)

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • leetcode算法—两数相加(中等)

    leetcode的两数相加[https://leetcode-cn.com/problems/add-two-nu...

  • 2. 两数相加(中等,链表)

    中文版本 题目 难度:中等 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式...

  • 2. 两数相加 难度:中等

    题目描述: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们...

  • 02.两数相加(难度:中等)

    两数相加(难度:中等) 题目描述: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序...

  • Swift-斐波那契数列

    斐波那契数列也被称之为黄金分割数列,费波那契数列由0和1开始,之后的费波那契系数就由之前的两数相加,0, 1, 1...

  • 算法练习01 记忆化斐波那契函数

    题目(2018-11-15) 斐波那契数列指的是类似于下面的数列: 也就是,第n个数是由前面两个数相加而来 完成f...

  • 1.链表(一)

    题目汇总https://leetcode-cn.com/tag/linked-list/2. 两数相加中等19. ...

网友评论

      本文标题:LeetCode2-两数列相加(中等)

      本文链接:https://www.haomeiwen.com/subject/gdpplftx.html