ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2. 两数相加

2021-11-11 15:35:59  阅读:114  来源: 互联网

标签:node right ListNode val 相加 next new


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

请你将两个数相加,并以相同形式返回一个表示和的链表。 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写的好不好的

 

标签:node,right,ListNode,val,相加,next,new
来源: https://www.cnblogs.com/cxyxiaobao/p/15540162.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有