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;
        }
    }
  • 相关阅读:
    Repeater中使用Button
    C#, JS, HTML 转义字符
    简化: ASP.NET 事件触发顺序
    必须写闭合标签
    JS通用窗口拖动函数
    SQL修修补补语句
    asp.net: RDLC 报表
    Ascx中引用(调用)JS文件,在用户控件中引用(调用)JS文件
    <a>
    JS, CSS 引用样式
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5724502.html
Copyright © 2011-2022 走看看