题解 | #两个链表生成相加链表#

两个链表生成相加链表

http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
//我又呦呦呦又来水题解了(也算是做一下笔记吧)
//首先讲下这题主要思路,嗯,合并两个链表,其实本质上就是大整数求和,即,先遍历两个链表
//用两个数组存储链表中的元素(吐槽一下,这个数组有必要开那么大吗?意思一下不就行了),
//然后就是大整数求和那一套了,不会的同学自行复习数据结构哦,不过这题还有一个小考点就是最后链表要用头插法而不能用尾插法(小坑)。
class Solution {
public:
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        // write code here
        int array1[1000001],array2[1000001],flag1=0,flag2=0;
        ListNode *p=head1;
        while(p)//遍历,存储元素
        {
            array1[flag1++]=p->val;
            p=p->next;
        }
        p=head2;
        while(p)//遍历,存储元素到数组中
        {
            array2[flag2++]=p->val;
            p=p->next;
        }
        ListNode *NewHead=NULL;//这个就是我们要返回的链表头指针
        int flag=0;//进位标志
        flag1--;flag2--;
        while(flag1>=0&&flag2>=0)//大整数求和,我就不讲了,百度or看书
        {
            int data=(array1[flag1]+array2[flag2]+flag)%10;
            flag=(array1[flag1--]+array2[flag2--]+flag)/10;
            ListNode *s=new ListNode(data);
            s->next=NewHead;//头插法,因为我们是从最后开始加的嘛,所以你先加的肯定要排在最后嘛(想不通自己写两个柿子加一下)
            NewHead=s;
        }
        while(flag1>=0)
        {
            int data=(array1[flag1]+flag)%10;
            flag=(array1[flag1--]+flag)/10;
            ListNode *s=new ListNode(data);
            s->next=NewHead;
            NewHead=s;
        }
        while(flag2>=0)
        {
            int data=(array2[flag2]+flag)%10;
            flag=(array2[flag2--]+flag)/10;
            ListNode *s=new ListNode(data);
            s->next=NewHead;
            NewHead=s;
        }
        if(flag==1)
        {
            ListNode *s=new ListNode(1);
            s->next=NewHead;
            NewHead=s;
            return NewHead;
        }
        return NewHead;//返回头指针,结束(水完,有要接着做了,库鲁西)
    }
};
全部评论

相关推荐

2025-12-12 19:58
哔哩哔哩_产品运营
跟同事聊天时候,同事说“你刚来时候blabla”,突然意识到自己已经正式工作一年多了!就这么从脆皮内耗大学生逐渐磨练成厚血条(厚脸皮)工位主理人。秋招简历当然也是投了不少份,但总有一些机会要留给自己的白月光,比如阿B,说说我秋招选择阿B的理由吧:1. “为爱发电”:说来兴趣真的是初心,阿B在手机陪我看了那么多番剧vlog学习视频,当然想和它距离更近一些。来了之后发现,B站重要活动要专门走内宣是有原因的,身边的六级大佬绝对不在少数。2. 实习体验感拉满:嗯对其实等不到正式工作就先来实习体验了。实习期在一个非常好的组,大家都很年轻氛围超好,做事情讲背景、讲逻辑不会只丢脏活累活。平时聊得来,工作起来也能快速打配合,项目完成时候所有人都成就感满满。再说说来正式工作之后的体验感:1. 校招生mentor文化很需要:在阿B每个校招生入职都是会有一位mentor的,不会让大家有刚工作人生地不熟就孤苦一人挑大梁的感觉。很幸运我的mt人真的超好,耐心温柔业务能力又很强。常常在对需求听她帮我说话时看着她身上闪耀的光芒想要流泪。有mt的话landing期会顺畅很多。公司也会安排一些活动帮助mentor和mentee增进感情。2.小动物们和各类活动是回血剂:工作起来当然难免遇到一些磕磕磨磨,但是压力大时候转头看到想悄悄溜过的小猫摸上一把,真的会治愈不少。还有节假日的各种活动和扫楼活动,真的会给上班增加动力。最后上图!没有任何工作会让人一直开心吧,但阿B你在照顾员工心情这一块儿做得真的很不错。
哔哩哔哩公司福利 915人发布
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务