LeetCode 445. 两数相加 II

题目链接:https://leetcode-cn.com/problems/add-two-numbers-ii/

给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。

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

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

示例:

输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7

因为个位在链表尾部,所以利用的先进后出
新建链表,用虚拟头节点:dummyHead,注意其创建方法
java 创建栈的方法:Stack s = new Stack<>();
头插法建链表

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1 == null) return l2;
        if(l2 == null) return l1;

        //声明栈
        Stack s1 = new Stack<>();
        Stack s2 = new Stack<>();

        while(l1 != null){
            s1.push(l1.val);
            l1 = l1.next;
        }
        while(l2 != null){
            s2.push(l2.val);
            l2 = l2.next;
        }

        ListNode dummyHead = new ListNode(0);//虚拟头节点,括号内的参数任意
        int carry = 0;//进位
        while(!s1.empty() || !s2.empty()){
            int sum = 0;
            if(!s1.empty()){
                sum += s1.pop();
            }
            if(!s2.empty()){
                sum += s2.pop();
            }
            sum += carry;//加上进位
            ListNode cur = new ListNode(sum % 10);
            carry = sum/10;//新的进位
            //头插法
            cur.next = dummyHead.next;
            dummyHead.next = cur;

        }

        if(carry != 0){
            ListNode cur = new ListNode(1);//进位只能为1,即待插入节点的val值为1
            cur.next = dummyHead.next;
            dummyHead.next = cur;
        }
        return dummyHead.next;
    }
   
}

你可能感兴趣的:(LeetCode 445. 两数相加 II)