『LeetCode|每日一题』---->链表求和

目录

1.每日一句

2.作者简介

『LeetCode|每日一题』链表求和

1.每日一题

2.解题思路

        2.1 思路分析

        2.2 核心代码

        2.3 完整代码

         2.4 运行结果


1.每日一句

蝴蝶所计算的,并非岁月,而是刹那,因此蝴蝶拥有充足的时间

2.作者简介

🏡个人主页:XiaoXiaoChen-2716 

📚学习专栏:力扣专栏 

🕒发布日期:2022/10/7

在这里插入图片描述

『LeetCode|每日一题』链表求和

1.每日一题

原文链接--->点我

2.解题思路

        2.1 思路分析

首先看到题目不能被例子迷惑了,因为两个链表的长度不一定是相同的,刚开始我就犯了这个错

        S1:首先定义一个头节点和下一个节点,都为空节点,然后一个一个把每一位所计算的值连接成一个链表,还需要一个整型变量来存进位值;

        S2:定义两个整型变量,用来把链表的节点值存储以便于算和,当然如果l1节点和l2节点都为空的话就没必要算了,这句话就是循环的条件;

        S3:首先很容易知道答案链表中的数应该为(l1.val + l2.val + jinwei) % 10,也就是总和的个位,接下来计算都算完之后得做出一个判断,如果头节点为空的话,那么此时头节点的值就应该是求余之后的那个数,此时还有一个重要的步骤,next = head(head和next指向了同一个节点head),如果没有这一步,那么next.next会报空指针错误,读者可以试一下。如果此时头节点不为空,那么应该把next的下一个节点赋值为sum % 10,也就是next.next = new ListNode(sum % 10),然后把next = next.next(把这两个节点同时指向next.next节点的位置);

        S4:接下来需要把进位算出来,也就是sum / 10,为下一次计算做准备;

        S5:如果每一位都算完之后,进位不为0,也就是说最高位还有进位,这时需要把进位给next.next,也就是最高位

补充:在head不为空的时候,要记得每次把next和next.next两个节点指向同一个位置,也就是指向下一个要计算的位置,如果单单的只写next = new ListNode(sum % 10),那么此时就是head,next,和new ListNode(sum % 10)三个节点同时指向了同一个节点,那么这个链表永远都只有一个节点,读者可以去试试

        2.2 核心代码

            int a1 , a2;
            if(l1 != null){
                a1 = l1.val;
            }else {
                a1 = 0;
            }
            if(l2 != null){
                a2 = l2.val;
            }else {
                a2 = 0;
            }
            int sum = a1 + a2 + jinwei;
            if(head == null){
                head = new ListNode(sum % 10);
                next = head;
            }else {
                next.next = new ListNode(sum % 10); 
                next = next.next;
            }
            jinwei = sum / 10;
            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }

        2.3 完整代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int jinwei = 0;
        ListNode head = null;
        ListNode next = null;
        while(l1 != null || l2 != null){
            int a1 , a2;
            if(l1 != null){
                a1 = l1.val;
            }else {
                a1 = 0;
            }
            if(l2 != null){
                a2 = l2.val;
            }else {
                a2 = 0;
            }
            int sum = a1 + a2 + jinwei;
            if(head == null){
                head = new ListNode(sum % 10);
                next = head;
            }else {
                next.next = new ListNode(sum % 10); 
                next = next.next;
            }
            jinwei = sum / 10;
            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
        }
        if(jinwei > 0){
            next.next = new ListNode(jinwei);
        }
        return head;   
    }
}

         2.4 运行结果


🍁 类似题目推荐:

1.数据结构基础 

2.算法专项练习 

3.剑指offer专项练习 

4.推荐一个学习网站:LeetCode,算法的提升在于日积月累,只有每天练习才能保持良好的状态

 如果文章对各位大佬有帮助就支持一下噢,新手尝试,不好的地方请各位大佬多多指教! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值