链表中的两数相加
解题思路:利用两个栈+一个链表
import java.util.Stack;
Stack<Integer> stack1=new Stack<>();//栈的初始化
利用栈“后进先出”的特点,后面的数先相加,进位由r保存,也解决了两个链表长度不一致的问题,没有的元素设为0
stack1.isEmpty()?0:stack1.pop();
具体代码如下:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Stack<Integer> stack1=new Stack<>();
Stack<Integer> stack2=new Stack<>();
ListNode n1=l1;
ListNode n2=l2;
ListNode res=null;
while(n1!=null) {
stack1.push(n1.val);
n1=n1.next;
}
while(n2!=null) {
stack2.push(n2.val);
n2=n2.next;
}
int r=0;//r代表进位
while(!stack1.isEmpty()||!stack2.isEmpty()||r!=0) {
int num1=stack1.isEmpty()?0:stack1.pop();//解决两个链接长度不一样的问题
int num2=stack2.isEmpty()?0:stack2.pop();
int num=num1+num2+r;
r=num/10;
int curr=num%10;//当前计算的数
ListNode tmp=new ListNode(curr);
tmp.next=res;//尾插法建立链表,最后一个元素为null
res=tmp; //res指针指向当前的元素
}
return res;
}
}
java中栈的用法