LeetCode 445.两数相加II(Java)

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

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

进阶:

链表不能修改该,换句话说,你不能对列表中的节点进行翻转。

示例:

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

使用栈的特性,先进后出

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        Stack<Integer> l1Stack = buildStack(l1);
        Stack<Integer> l2Stack = buildStack(l2);
        //定义一个头节点
        ListNode head=new ListNode(-1);
        ListNode p=head;
        //定义一个进位变量
        int carry=0;
        //遍历两个栈的时候,依次出栈的数据相加,即代表从低位开始相加
        while(!l1Stack.isEmpty()||!l2Stack.isEmpty()||carry!=0){
            int x=l1Stack.isEmpty()? 0:l1Stack.pop();
            int y=l2Stack.isEmpty()? 0:l2Stack.pop();
            int sum=x+y+carry;
            ListNode node=new ListNode(sum%10);
            //相当于把当前节点node插入到已有的链表中的头部
            //将7插入到已经构造好的链表的首部(head下一个节点)       head->8->0->7
            node.next=head.next;
            head.next=node;
            carry=sum/10;
        }
        return head.next;
    }

    private Stack<Integer> buildStack(ListNode l) {
        Stack<Integer> stack = new Stack<>();
        while (l != null) {
            stack.push(l.val);
            l = l.next;
        }
        return stack;
    }

你可能感兴趣的:(LeetCode题解)