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();
        }
    }
    
  • 相关阅读:
    HDU 3681 Prison Break 越狱(状压DP,变形)
    POJ 2411 Mondriaan's Dream (状压DP,骨牌覆盖,经典)
    ZOJ 3471 Most Powerful (状压DP,经典)
    POJ 2288 Islands and Bridges (状压DP,变形)
    HDU 3001 Travelling (状压DP,3进制)
    POJ 3311 Hie with the Pie (状压DP)
    POJ 1185 炮兵阵地 (状压DP,轮廓线DP)
    FZU 2204 7
    POJ 3254 Corn Fields (状压DP,轮廓线DP)
    ZOJ 3494 BCD Code (数位DP,AC自动机)
  • 原文地址:https://www.cnblogs.com/s-star/p/14546754.html
Copyright © 2011-2022 走看看