美文网首页
两数相加

两数相加

作者: 二进制的二哈 | 来源:发表于2019-11-21 18:46 被阅读0次

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/add-two-numbers

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

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

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

    Java代码:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode head = new ListNode(0);
            ListNode curr = new ListNode(0);
            head.next = curr;
            while(l1 != null || l2 != null){
                if(l1 == null){
                    curr.next = l2;
                    break;
                }
                if(l2 == null){
                    curr.next = l1;
                    break;
                } 
                int sum = l1.val + l2.val;
                l1 = l1.next;
                l2 = l2.next;
                if(sum < 10){
                    curr.next = new ListNode(sum);
                }else{
                    curr.next = new ListNode(sum%10);
                    if(l1 == null && l2 == null){
                        l1 = new ListNode(1);
                    }else if(l1 == null){
                        l1 = new ListNode(1);
                    }else if(l2 == null){
                        l2 = new ListNode(1);
                    }else{
                        l1.val = l1.val + 1;
                    }
                }
                curr = curr.next;
            }
            return head.next.next;
        }
    }
    

    Python代码:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
            head = ListNode(0)
            curr = ListNode(0)
            head.next = curr
            while l1 is not None or l2 is not None:
                if l1 is None:
                    curr.next = l2
                    break
                if l2 is None:
                    curr.next = l1
                    break
    
                sum = l1.val + l2.val
    
                l1 = l1.next
                l2 = l2.next
    
                if sum < 10:
                    curr.next = ListNode(sum)
                else:
                    curr.next = ListNode(sum%10)
                    if l1 is None and l2 is None:
                        l1 = ListNode(1)
                    elif l1 is None:
                        l1 = ListNode(1)
                    elif l2 is None:
                        l2 = ListNode(1)
                    else:
                        l1.val = l1.val + 1
    
                curr = curr.next
            return head.next.next
    

    相关文章

      网友评论

          本文标题:两数相加

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