题解 | #两个链表生成相加链表#

两个链表生成相加链表

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;
    }
}
全部评论

相关推荐

铁锈不腻玩家:下面那个袁先生删了,问他怎么回事,头像都换不明白
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务