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

链表相加(二)

http://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) {
        // write code here
        Deque<Integer> keep1 = new LinkedList<Integer>();
        Deque<Integer> keep2 = new LinkedList<Integer>();
        ListNode head = new ListNode(-1);
        //初始化栈
        while(head1!=null){
            keep1.offerLast(head1.val);
            head1 = head1.next;
        }
        while(head2!=null){
            keep2.offerLast(head2.val);
            head2 = head2.next;
        }
        //开始计算,count保存进位
        int count = 0;
        while(!keep1.isEmpty() && !keep2.isEmpty()){
            int a = keep1.pollLast();
            int b = keep2.pollLast();
            int sum = a+b+count;
            count = sum / 10;
            ListNode tmp = new ListNode(sum%10);
            tmp.next = head.next;
            head.next = tmp;
        }
        //余值计算
        Deque<Integer> keep = keep1.isEmpty()?keep2:keep1;
        while(!keep.isEmpty()){
            int t = keep.pollLast();
            int sum = t+count;
            count = sum / 10;
            ListNode tmp = new ListNode(sum%10);
            tmp.next = head.next;
            head.next = tmp;
        }
        //最后的进位判断
        if(count!=0){
            ListNode tmp = new ListNode(1);
            tmp.next = head.next;
            head.next = tmp;
        }
        
        return head.next;
    }
}
全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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