LeetCode 2. Add Two Numbers(Java)

来源:互联网 发布:otdr测试曲线图软件 编辑:程序博客网 时间:2024/02/24 04:04

原题:
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


题意:

给你两个非空的链表代表非负数,数字存储在相反的顺序并且每个节点只包含一个数字,将两个数字相加并返回一个链表。
除了数字0之外,你可以假设两个数字不包含任何前导0。


思路:
1.对两个链接进行遍历,直到一个到尾为止,中间生成新节点对为两数和(记得取余数并且检查是否有进位);
2.检查是否两个链表都已经到尾,对未到尾部的链表进行遍历,直到尾部为止,中间生成新节点(每次循环记得检查进位)。
3.返回生成的链表头即可。


代码:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        int carry = 0;//1代表进位,0代表无进位        int v = 0;//中间变量,存储当前节点的值        ListNode l = new ListNode(0);        ListNode head = l;        while(l1 != null && l2 != null){            if(l1.val + l2.val + carry > 9){                v = (l1.val + l2.val + carry) % 10;                carry = 1;            }else{                v = l1.val + l2.val + carry;                carry = 0;            }            ListNode node = new ListNode(v);            l.next = node;            l = l.next;            l1 = l1.next;            l2 = l2.next;        }        while(l1 != null){            if(carry == 1){                v = l1.val + 1;                if(v > 9){                    v %= 10;                    carry = 1;                }else{                    carry = 0;                   }            }else{                v = l1.val;            }            ListNode node = new ListNode(v);            l.next = node;            l = l.next;            l1 = l1.next;        }        while(l2 != null){            if(carry == 1){                v = l2.val + 1;                if(v > 9){                    v %= 10;                    carry = 1;                }else{                    carry = 0;                   }            }else{                v = l2.val;            }            ListNode node = new ListNode(v);            l.next = node;            l = l.next;            l2 = l2.next;        }        if(carry == 1 ){            ListNode node = new ListNode(1);            l.next = node;        }        return head.next;    }}
0 0
原创粉丝点击