zoukankan      html  css  js  c++  java
  • LeetCode

    题目描述

    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

    你可以假设除了数字0之外,这两个数都不会以0开头。

    示例

    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807.
    

    思路

    1. 定义一个头结点,以及l1、l2、头结点的临时结点,定义一个变量存放进位
    2. 遍历两个临时链表,终止条件为两个临时链表的当前节点都为空
    3. 求出进位和两个链表当前位置的和,和10相除作为下一次进位,和10取余作为新节点,头结点临时结点下一个为此新节点
    4. 头结点、两个链表临时结点都取下一个,直到遍历结束
    5. 遍历结束,判断进位值是不是0,如果比0大,则表示还有进位,此进位作头结点临时结点的下一位
    6. 最后返回头结点的下一个

    Code

    @Data
    public class ListNode {
        private int val;
        private ListNode next;
    
        public ListNode(int x) {
            val = x;
        }
    }
    
    public class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            if (Objects.isNull(l1) && Objects.isNull(l2)) {
                return null;
            }
            ListNode head = new ListNode(0);
            ListNode l1Temp = l1;
            ListNode l2Temp = l2;
            ListNode headTemp = head;
            int num = 0;
            while (l1Temp != null || l2Temp != null) {
                int sum = num + (Objects.nonNull(l1Temp) ? l1Temp.getVal() : 0) + (Objects.nonNull(l2Temp) ? l2Temp.getVal() : 0);
                num = sum / 10;
                headTemp.setNext(new ListNode(sum % 10));
                headTemp = headTemp.getNext();
                l1Temp = Objects.nonNull(l1Temp) ? l1Temp.getNext() : null;
                l2Temp = Objects.nonNull(l2Temp) ? l2Temp.getNext() : null;
            }
            if (num > 0) {
                headTemp.setNext(new ListNode(num));
            }
            return head.getNext();
        }
    }
    
  • 相关阅读:
    JVM(随手笔记)
    linux常用操作(个人笔记)
    MySQL学习笔记(个人随手笔记)
    jquery对象和Dom对象的转化([0])
    函数防抖和函数节流
    数据持久化分析
    day.js处理相对时间
    外链资源403的处理
    前端实现图片预览的两种方式及使用
    监听器标准写法
  • 原文地址:https://www.cnblogs.com/s-star/p/14546754.html
Copyright © 2011-2022 走看看