day03--力扣:两数相加

→_→一言难尽的求知过程

题目:

思路:例示说的很清楚,但如果你想着用 链表.下标(类似a[i]或者把他想成一个字符串来解题

哒咩T^T   那就证明,你把学过的数据结构忘得干净,这是链表啊!这是链表啊!这是链表啊!

跟顺序表不同,链表存储是随机的,一个结点里包含存储的数据var和指向下一个结点的指针next

首先要新建一个结点的类,里面包含数据和下一个结点位置两个信息, 方便后面需要结点时实例化,就比方你需要一个整型变量会 int a ,结点的方法里的内容是要自己写,然后ListNode newNode=new ListNode 这样实例化的。

每次都搞不明白,java一会public,一会public class,还能调用其他里面的方法??(学的浅,忘得净)回去看了一下,一个Java源文件最多包含一个public类,并且这个类必须与源文件同名,否则编译器报错,不能编译。

可以有多个class类,对于class、方法、函数的关系:

class是类,就比如人、箱子这都是没有具体指向的类,方法和函数是同一个东西只不过java里的函数叫方法,class类可以拥有属性和方法,方法需要定义在类中。class 箱子,把实现某些需求的方法放进类里也就是放进箱子里,把这个箱子打包,下次你需要的时候就实例化调用他(可能有时候需要参数)

public class box{
    public void method(int a){

    }

} 

 代码:在力扣上可以直接用solution类作为答案,测试时会传入测试参数,我想看到答案所以多写了main方法

public class test {
    public static void main(String[] args) {
        ListNode L1 = new ListNode(2, new ListNode(3));//实例化L1,L2然后传入结点值
        ListNode L2 = new ListNode(5, new ListNode(6));
        solution s1=new solution();//实例化solution类,solution是实现这道题的关键代码
        s1.addTwoNumbers(L1,L2);//调用solution类中的addTwoNumbers方法并传入参数

    }

}

class ListNode {
        //构造结点
        int val; //数据
        ListNode next; //下一个结点

        ListNode() {
        } //创建一个无参构造方法,用于初始化

        ListNode(int val) {
            this.val = val;
        } //创建一个有参构造方法,便于给结点传数据

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    } //链表结


class solution{
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //   public  ListNode addTwoNumbers(ListNode l1, ListNode l2){
        ListNode dummyNode = new ListNode(0);//创建一个哑结点,他的指针指向新链表的头结点
        ListNode preNode = dummyNode; //preNode表示当前结点的前一结点
        int carry = 0;//表示两结点相加进位的值,加法最多只进一位,所以carry要么0要么1
        while(l1 !=null||l2 !=null||carry!=0)
        { //两个链表只要一个不为空或者有进位就一直循环
            int sum = carry;//当前结点的累加值,需要加上前面进位的值
            if (l1 != null) {//如果第一个链表当前结点不为空,加上第一个链表当前节点的值
                sum += l1.val;
                l1 = l1.next;
            }//第二个链表同上
            if (l2 != null) {
                sum += l2.val;
                l2 = l2.next;
            }//创建新链表,preNode的next指针指向新的链表,新链表结点里存的是l1,l2相同位相加结果的取余(要进位)
            ListNode newNode = new ListNode(sum % 10);
            preNode.next = newNode;
            carry = sum / 10;//更新carry的值
            preNode = newNode;//更新preNode,相当于往后跳下一个了
            System.out.println(newNode.val);
        }

        return dummyNode.next;

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值