zoukankan      html  css  js  c++  java
  • 2. 两数相加

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

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

    题解:具体意思就是1-2-3   +2-6-7      3-8-0-1  就是反向相加

    具体,图解:

     

     具体解题思路:

    两个链表数位置相加,进位

    代码如下

    package com.cxy.registersever.study;
    
    public class Demo {
        public static void main(String[] args) {
            ListNode node1 =new ListNode(2);
            node1.next =new ListNode(4);
            node1.next.next =new ListNode(3);
    
            ListNode node2 =new ListNode(5);
            node2.next =new ListNode(6);
          //  node2.next.next =new ListNode(4);
            ListNode listNode = addTwoNumbers(node1, node2);
            System.out.println(listNode.next.val);
            System.out.println(listNode.val+""+listNode.next.val+""+listNode.next.next.val);
    
        }
        public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            //定义进位值
            int right =0;
            // 定义头节点
            ListNode node1 =new ListNode(0);
            //  定义节点零时变量
            ListNode node =node1;
            // 接收l1的节点
            ListNode l1Next =l1;
            // 接收l2的节点
            ListNode l2next =l2;
            while(true){
                // 判断l1的节点值为空
                if (l1Next == null){
                    // 判断l2的节点值为空
                    if (l2next == null){
                        // 如果进位值为0
                        if (right==0){
                            break;
                        }
                        // 如果进位值不为0
                        node.next =new ListNode(right);
                        break;
                    }
                    // 判断l2的节点值不为空
                    int val = l2next.val;
                    // 判断l2的节点值+进位值大于10,代表还需要进位
                    if (val+right-10>=0){
                        node.next =new ListNode(val+right-10);
                        // 接收点后移动
                        node =node.next;
                        // 进位值 为1
                        right=1;
                    }else{
                        //不大于时候
                        node.next =new ListNode(val+right);
                        node =node.next;
                        right =0;
                    }
                    // 节点后移
                    l2next =l2next.next;
                }else{
                    if (l2next == null){
    
                        int val =l1Next.val;
                        if (val+right-10>0){
                            node.next =new ListNode(val+right-10);
                            node =node.next;
                            right=1;
                        }else{
                            node.next =new ListNode(val+right);
                            node =node.next;
                            right =0;
                        }
                        l1Next =l1Next.next;
    
                    }else{
                        int val =l1Next.val;
                        int val2 =l2next.val;
                        if (val+right+val2-10>=0){
                            node.next =new ListNode(val+right+val2-10);
                            node =node.next;
                            right=1;
                        }else{
                            node.next =new ListNode(val+right+val2);
                            node =node.next;
                            right =0;
                        }
                        l1Next =l1Next.next;
                        l2next =l2next.next;
                    }
                }
            }
            return node1.next;
        }
    
    }

    综合起来:可以知道这个题是训练if,else写的好不好的

  • 相关阅读:
    【HDU 2874】Connections between cities(LCA)
    【Gym 100947C】Rotate It !!
    【CodeForces 615E】Hexagons
    Course Selection CodeChef
    UVA 10779 Collectors Problem[最大流]
    1855: [Scoi2010]股票交易[单调队列优化DP]
    1854: [Scoi2010]游戏[并查集]
    1853: [Scoi2010]幸运数字[容斥原理]
    poj3233 Matrix Power Series
    3969 [Mz]平方和【斐波那契平方和】
  • 原文地址:https://www.cnblogs.com/cxyxiaobao/p/15540162.html
Copyright © 2011-2022 走看看