题解 | #链表相加(二)#

链表相加(二)

https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

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) {
	  //思想:使用三个栈来分别存储链表1,链表2,链表1+2。通过栈的特性来进行相加
        // write code here
        Stack<Integer> stack1 = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        Stack<Integer> stack3 = new Stack<>();
	  //将链表1所有节点入栈1
        while (head1 != null) {
            stack1.push(head1.val);
            head1 = head1.next;
        }
	  //将链表2所有节点入栈2
        while (head2 != null) {
            stack2.push(head2.val);
            head2 = head2.next;
        }
        //表示是否进位?0不进位/1进位
        int add = 0;
	  	//栈1或2不为空
        while (!stack1.isEmpty() || !stack2.isEmpty()) {
            //如果栈1为空
            if (stack1.isEmpty()) {
                //有进位则+1再入栈
                if (add == 1) {
                    int num = stack2.pop();
                    num++;
                    add = 0;
				  	//进位后如果大于1-则改变进位状态再入栈
                    if (num >= 10) {
                        add = 1;
                        num -= 10;
                        stack3.push(num);
                    }else{
                        stack3.push(num);
                    }
				  //无进位直接入栈
                }else{
                    int num = stack2.pop();
                	stack3.push(num);
                }
                
                //如果栈2为空
            } else if (stack2.isEmpty()) {
			 	 //有进位则+1再入栈
                if (add == 1) {
                    int num = stack1.pop();
                    num++;
                    add = 0;
				  //进位后如果大于1-则改变进位状态再入栈
                    if (num >= 10) {
                        add = 1;
                        num -= 10;
                        stack3.push(num);
                    }else{
                        stack3.push(num);
                    }
                }else{
                    int num = stack1.pop();
                    stack3.push(num);
                }
                
                //如果栈12都不为空
            } else {
                Integer num1 = stack1.pop();
                Integer num2 = stack2.pop();
                Integer num3 = num1 + num2;
			  	//有进位则两数相加再+1
                if (add == 1) {
                    num3 += 1;
                    add = 0;
                }
                if (num3 >= 10) {
                    add = 1;
                    num3 -= 10;
                    stack3.push(num3);
                }else{
                    stack3.push(num3);
                }
            }
        }
	  	//最终如果有进位则+1
        if(add==1){
            stack3.push(1);
        }
	  //创建链表将内容添加进去
        ListNode tmp=new ListNode(stack3.pop());
        ListNode returnList=tmp;
        while(!stack3.isEmpty()){
            ListNode tmpNode=new ListNode(stack3.pop());
            tmp.next=tmpNode;
            tmp=tmp.next;
        }
        return returnList;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务