zoukankan      html  css  js  c++  java
  • [LintCode]链表求和

    问题分析:

    我们通过遍历两个链表拿到每个位的值,两个值加上前一位进位值(0或者1)模10就是该位的值,除以10就是向高位的进位值(0或者1)。

    由于两个链表可以不一样长,所以要及时判断,一旦为null,该位的值就要变成0。

    有一种情况比较特殊,比如:1->1->1->null, 9->8->8->null,最终结果为0->0->0->1->null,需要保留最高位。

    而1->1->1->null, 9->8->7->null,最终结果为0->0->9->null,则不需要保留最高位,最后应该加一个判断。

    问题求解:

    public class Solution {
    
        public ListNode addLists(ListNode l1, ListNode l2) {
            ListNode preListNode = new ListNode(0);
            ListNode nowListNode = new ListNode(0);
            ListNode resultListNode = null;
            int val = 0;// 当前位置的数
            int add = 0;// 进位
            while (l1 != null || l2 != null) {
                //该位的数值
                val = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + add) % 10;
                //对下一位产生的进位
                add = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + add) / 10;
                l1 = l1 == null ? l1 : l1.next;//判断l1是否往下移动
                l2 = l2 == null ? l2 : l2.next;//判断l2是否往下移动
                //nowListNode和nowListNode用来产生一个新的链表
                nowListNode.val = val;
                if (resultListNode == null) {
                    resultListNode = nowListNode;
                }
                preListNode = nowListNode;
                nowListNode = new ListNode(0);
                preListNode.next = nowListNode;
            }
            //最后还要多来一次判断,因为有一种可能,两个链表一样长,最后一位又向上进了一位
            val = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + add) % 10;
            add = ((l1 == null ? 0 : l1.val) + (l2 == null ? 0 : l2.val) + add) / 10;
            nowListNode.val = val;
            //如果最后一位又向上进了一位,新的最后一位不为0,应该保留,否则就为0,应当舍弃
            if(nowListNode.val == 0){
                preListNode.next = null;
            }
            return resultListNode;
        }
    }
    
    class ListNode {
        int val;
        ListNode next;
    
        ListNode(int x) {
            val = x;
            next = null;
        }
    }
  • 相关阅读:
    1-1-LVS负载均衡
    linux的软链接和硬连接的区别
    linux的目录结构及配置文件
    C6和C7对比
    1-6 RAID级别介绍
    Animation动画(一)
    Android中的BroadCast静态注册与动态注册
    Android中Action
    隐式Intent
    Volley框架使用(POST)
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5724502.html
Copyright © 2011-2022 走看看