美文网首页
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-两数列相加(中等)

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