题解 | #牛群的能量值#

牛群的能量值

https://www.nowcoder.com/practice/fc49a20f47ac431981ef17aee6bd7d15?tpId=354&tqId=10590540&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param l1 ListNode类
     * @param l2 ListNode类
     * @return ListNode类
     */
    public ListNode addEnergyValues (ListNode l1, ListNode l2) {
        ListNode head = null, tail = null;
        // 进位数
        int carry = 0;
        while (l1 != null || l2 != null) {
            // 哪个节点不为null那么就有值,否则默认为0
            int n1 = l1 != null ? l1.val : 0;
            int n2 = l2 != null ? l2.val : 0;
            // sum==节点的值相加+进位数
            int sum = n1 + n2 + carry;
            // 计算两个数的和,排除超过10的情况,超过10取余数
            if (head == null) {
                head = tail = new ListNode(sum % 10);
            } else {
                tail.next = new ListNode(sum % 10);
                tail = tail.next;
            }
            // 计算进位数
            carry = sum / 10;
            // l1不为null,节点后移
            if (l1 != null) {
                l1 = l1.next;
            }
            // l2不为null,节点后移
            if (l2 != null) {
                l2 = l2.next;
            }
        }
        // 如果最后两个数相加还有进位数,将进位数赋给链表的新结点
        if (carry > 0) {
            tail.next = new ListNode(carry);
        }
        // 返回链表头结点
        return head;

    }
}

本题知识点分析:

1.前驱结点和后继结点

2.链表遍历和赋值

3.数学模拟

本题解题思路分析:

1.将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,比如564+23=564+023=587.

2.每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值

3.如果两个链表全部遍历完毕后,进位值为 111,则在新链表最前方添加节点 111

本题使用编程语言: Java

高频面试算法题解 文章被收录于专栏

高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!

全部评论

相关推荐

点赞 评论 收藏
分享
08-15 12:09
门头沟学院 Java
点赞 评论 收藏
分享
07-07 17:06
已编辑
深圳技术大学 golang
您好请问贵司招切图仔...:b站的录用通知好中二
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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