题目
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
思路
最开始的错误思路:本来想遍历两个listnode,然后得到值加和,得到结果遍历赋给新的listnode,这个就是结果,但是,链表的长度范围为 [1, 100],int根本装不下。
参考题解的思路:
把所有数字压入栈中,再依次取出相加。
代码
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Deque<Integer> queue1=new ArrayDeque<Integer>();
Deque<Integer> queue2=new ArrayDeque<Integer>();
while(l1!=null) {queue1.push(l1.val);l1=l1.next;}
while(l2!=null) {queue2.push(l2.val);l2=l2.next;}
ListNode pre=null;
Boolean isAdd=false;
while(!queue1.isEmpty()||!queue2.isEmpty()){
int x=0;
if(!queue1.isEmpty()) x+=queue1.pop();
if(!queue2.isEmpty()) x+=queue2.pop();
if(isAdd) x+=1;
if(x>=10) {isAdd=true;x-=10;}
else isAdd=false;
ListNode m=new ListNode(x);
m.next=pre;
pre=m;
}
if(isAdd){
ListNode m=new ListNode(1);
m.next=pre;
pre=m;
}
return pre;
}
}
查找的问题
1.Java栈的实现
双端队列作为堆栈数据结构
Java Collections框架的Stack类提供了堆栈的实现。
但是,建议Deque用作堆栈而不是Stack类。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈的方法:
push() - 在双端队列的开头添加元素
pop() - 从双端队列的开头删除元素
peek() - 从双端队列的开头返回一个元素
2.判断队列是否为空isEmpty()方法,不是是否等于null