链表相加_2_445
LeetCode原题:两数相加:https://leetcode-cn.com/problems/add-two-numbers/
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设这两个数都不会以 0 开头。【表头为低位】
/* 解题思路: 1.初始化一个虚拟头结点dummy,以及工作指针prev. 2.循环迭代相加两个链表对应的数字 2.1 循环的终止条件是:当head1为空并且head2也为空且仅为carry为空时,退出循环 2.2 循环的内容是:依次取两个链表当前节点的值,然后进行相加。 2.3 注意,处理当前节点为null时 2.4 相加后,将值整除10,赋值给新的链表节点, 2.4 每次都头插法进行连接即可。 3.返回 dummy.next即可。 */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode prev = dummy; int carry = 0; while(l1 != null || l2 != null || carry != 0){ int x = l1 == null ? 0: l1.val; int y = l2 == null ? 0: l2.val; int sum = x + y + carry; ListNode node = new ListNode(sum % 10); prev.next = node; prev = node; // prev.next = new ListNode( sum % 10); // prev = prev.next; carry = sum / 10; if(l1 != null) l1 = l1.next; if(l2 != null) l2 = l2.next; } return dummy.next; } }
LeetCode原题:两数相加II:https://leetcode-cn.com/problems/add-two-numbers-ii/
给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。【表头为高位】
/* 解题思路: 1.利用栈,将两个链表的数值分别存放到栈中。 2.然后遍历,每次从栈中取出节点,进行相加 3.相加过程和上面一样。 4.因为表头是最高位,所以每次连接的时候,需要用头插法。 */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode h1 = l1; ListNode h2 = l2; Stack<ListNode> s1 = new Stack<>(); Stack<ListNode> s2 = new Stack<>(); while(h1 != null) { s1.push(h1); h1 = h1.next; } while(h2 != null) { s2.push(h2); h2 = h2.next; } int carry = 0; ListNode prev= null; while(!s1.isEmpty() || !s2.isEmpty() || carry != 0){ int x = s1.isEmpty() ? 0: s1.pop().val; int y = s2.isEmpty() ? 0: s2.pop().val; int sum = x + y + carry; ListNode node = new ListNode(sum % 10); node.next = prev; prev = node; carry = sum / 10; } return prev; } }

浙公网安备 33010602011771号