题解 | #两个链表生成相加链表#
两个链表生成相加链表
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
将两个链表中的元素存入两个栈;
对两个栈中的元素进行出栈相加,放入第三个栈;
最后判断哪一个栈非空,将栈中的元素存入第三个栈,注意判断此时的进位carry是否为0;
之后将栈中的元素出栈,构建链表;
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
// write code here
//两个链表入栈之后,相加入第三个栈
Stack<Integer> stack1=new Stack<>();
Stack<Integer> stack2=new Stack<>();
ListNode p1=head1;
ListNode p2=head2;
while(p1!=null){
stack1.push(p1.val);
p1=p1.next;
}
while(p2!=null){
stack2.push(p2.val);
p2=p2.next;
}
int carry=0;
Stack<Integer> stack3=new Stack<>();
while(!stack1.empty()&&!stack2.empty()){
int tem=carry+stack1.pop()+stack2.pop();
stack3.push(tem%10);
carry=tem/10;
}
while(!stack1.empty()){
int tem=stack1.pop()+carry;
stack3.push(tem%10);
carry=tem/10;
}
while(!stack2.empty()){
int tem=stack2.pop()+carry;
stack3.push(tem%10);
carry=tem/10;
}
if(carry!=0)
stack3.push(carry);
ListNode p3=head1;
//连接两个链表
while(p3.next!=null){
p3=p3.next;
}
p3.next=head2;
ListNode p4=head1;
while(!stack3.empty()){
p4.val=stack3.pop();
if(stack3.empty())
continue;
else//当栈为空时,指针再移动
p4=p4.next;
}
p4.next=null;
return head1;
}
} 