美文网首页
两数相加

两数相加

作者: 我知他风雨兼程途径日暮不赏 | 来源:发表于2020-04-14 12:54 被阅读0次

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

    1. 题目

    给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
    你可以假设除了数字 0 之外,这两个数字都不会以零开头。

    • 进阶:
      如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
    • 示例:
      输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
      输出:7 -> 8 -> 0 -> 7

    /**
     * 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) {
    }
    }
    

    2.JAVA解答

    先遍历链,存入栈中,然后从栈中取出数据,拼接list。


    时间复杂度O(N),空间复杂度O(N)
    /**
     * 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) {
    Stack<Integer> stack1 = new Stack<>();
            Stack<Integer> stack2 = new Stack<>();
            ListNode temp = l1;
            while(temp!=null){
                stack1.push(temp.val);
                temp = temp.next;
            }
            temp = l2;
            while(temp!=null){
                stack2.push(temp.val);
                temp = temp.next;
            }
            ListNode res = null;
            boolean flag =false;
            while(stack1.size()!=0 || stack2.size()!=0){
                int number = 0;
                if(stack1.size()!=0 && stack2.size()!=0){
                    number = stack1.pop()+stack2.pop();
                }else if(stack1.size()!=0){
                    number = stack1.pop();
                }else{
                    number = stack2.pop();
                }
                if(flag == true){
                    number++;
                }
                if(number>=10){
                    flag = true;
                }else{
                    flag = false;
                }
                ListNode listNode = new ListNode(number%10);
                if(res == null){
                    res = listNode;
                    continue;
                }
                listNode.next=res;
                res = listNode;
            }
            if(flag){
                ListNode listNode = new ListNode(1);
                listNode.next=res;
                res = listNode;
            }
            
            return res;
        }
    }
    

    相关文章

      网友评论

          本文标题:两数相加

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