来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
1. 题目
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
- 进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。 - 示例:
输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
}
}
2.JAVA解答
先遍历链,存入栈中,然后从栈中取出数据,拼接list。
时间复杂度O(N),空间复杂度O(N)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
ListNode temp = l1;
while(temp!=null){
stack1.push(temp.val);
temp = temp.next;
}
temp = l2;
while(temp!=null){
stack2.push(temp.val);
temp = temp.next;
}
ListNode res = null;
boolean flag =false;
while(stack1.size()!=0 || stack2.size()!=0){
int number = 0;
if(stack1.size()!=0 && stack2.size()!=0){
number = stack1.pop()+stack2.pop();
}else if(stack1.size()!=0){
number = stack1.pop();
}else{
number = stack2.pop();
}
if(flag == true){
number++;
}
if(number>=10){
flag = true;
}else{
flag = false;
}
ListNode listNode = new ListNode(number%10);
if(res == null){
res = listNode;
continue;
}
listNode.next=res;
res = listNode;
}
if(flag){
ListNode listNode = new ListNode(1);
listNode.next=res;
res = listNode;
}
return res;
}
}
网友评论