LintCode领扣算法问题答案:221. 链表求和 II
作者:互联网
221. 链表求和 II
描述
假定用链表表示两个数,其中每个节点仅包含一个数字。假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式。
样例 1:
输入:
6->1->7 2->9->5
输出:
9->1->2
样例 2:
输入:
1->2->3 4->5->6
输出:
5->7->9
文章目录
题解
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param l1: The first list.
* @param l2: The second list.
* @return: the sum list of l1 and l2.
*/
public ListNode addLists2(ListNode l1, ListNode l2) {
// write your code here
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
Deque<ListNode> s1 = new LinkedList<>();
while (l1 != null) {
s1.push(l1);
l1 = l1.next;
}
Deque<ListNode> s2 = new LinkedList<>();
while (l2 != null) {
s2.push(l2);
l2 = l2.next;
}
ListNode h = new ListNode(0);
// tail
ListNode t = h;
// last one
ListNode l = t;
while (!s1.isEmpty()
|| !s2.isEmpty()) {
int v1 = 0;
int v2 = 0;
if (!s1.isEmpty()) {
v1 = s1.pop().val;
}
if (!s2.isEmpty()) {
v2 = s2.pop().val;
}
t.val += v1 + v2;
if (t.val > 9) {
t.next = new ListNode(1);
t.val %= 10;
} else {
t.next = new ListNode(0);
}
l = t;
t = t.next;
}
if (t.val == 0) {
l.next = null;
}
h = this.reverse(h);
return h;
}
private ListNode reverse(ListNode l) {
Deque<ListNode> stack = new LinkedList<>();
ListNode h = l;
while (h.next != null) {
stack.push(h);
h = h.next;
}
ListNode t = h;
while (!stack.isEmpty()) {
t.next = stack.pop();
t = t.next;
}
t.next = null;
return h;
}
}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由二当家的白帽子博客原创,转载请注明来源,谢谢~
标签:ListNode,val,LintCode,next,链表,领扣,l2,l1,null 来源: https://blog.csdn.net/leyi520/article/details/112964652