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();
        }
    }
    
  • 相关阅读:
    Linux系统下手把手完成无人值守安装服务
    2019年国际网络安全趋势
    Wi-Fi Mesh网络技术
    如何用nginx在本地把9000端口转发到80端口上
    LAMP架构部署和动态网站环境的配置
    智能校服受到多数学生追捧
    热心网友设计出更美的Windows 10开始菜单
    一起来全面解析5G网络领域最关键的十大技术
    如何跟上时代的步伐进入云世界
    c#写入文件流
  • 原文地址:https://www.cnblogs.com/s-star/p/14546754.html
Copyright © 2011-2022 走看看