我是靠谱客的博主 积极星星,最近开发中收集的这篇文章主要介绍『LeetCode|每日一题』---->链表求和1.每日一句2.作者简介『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,算法的提升在于日积月累,只有每天练习才能保持良好的状态

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

最后

以上就是积极星星为你收集整理的『LeetCode|每日一题』---->链表求和1.每日一句2.作者简介『LeetCode|每日一题』链表求和的全部内容,希望文章能够帮你解决『LeetCode|每日一题』---->链表求和1.每日一句2.作者简介『LeetCode|每日一题』链表求和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(773)

评论列表共有 0 条评论

立即
投稿
返回
顶部