题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param head1 ListNode类
     * @param head2 ListNode类
     * @return ListNode类
     */
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        ListNode p1 = head1;
        ListNode p2 = head2;

        // Reverse LinkedList
        LinkedList<Integer> stack1 = new LinkedList();
        LinkedList<Integer> stack2 = new LinkedList();

        while (p1 != null) {
            stack1.push(p1.val);
            p1 = p1.next;
        }
        while (p2 != null) {
            stack2.push(p2.val);
            p2 = p2.next;
        }

        // sum, pre_mark, tail_result_node
        int sum = 0, carray = 0;
        ListNode sumHead = null; 

        // 加上 carray != 0 条件是因为:高位相加有可能需要向更高位进 1
        while (!stack1.isEmpty() || !stack2.isEmpty() || carray != 0) {
            sum = 0;
            if (!stack1.isEmpty()) {
                sum += stack1.pop();
            }
            if (!stack2.isEmpty()) {
                sum += stack2.pop();
            }
            sum += carray;

            // 总数分解
            carray = sum / 10;
            sum = sum % 10;

            // 结果链表节点重连
            ListNode curNode = new ListNode(sum);
            curNode.next = sumHead;
            sumHead = curNode;
        }
        return sumHead;
    }
}

懒得手写了,直接Copy一个改了一下。

思路:Stack(链表反转)

个人看法:可以将内部判断移到外面,也就是两个栈累计和到任一栈为空。其次是将不为空的栈循环遍历。

全部评论

相关推荐

希望被捞的猫头鹰很理智:大概率待遇低怕硕士跑路
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务