【链表】两数相加

零、题目
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头

/**

  • Definition for singly-linked list.
  • struct ListNode {
  • int val;
    
  • struct ListNode *next;
    
  • };
    */

一、阅读题目
1 已知量:加法的两个元素;
2 未知量:加法的结果;
3 条件:加法;

二、拟定方案
1 获取加法中,每一位的分开的元素;
2 进位;
3 获取每个节点的值;
4 插入节点,尾部插入;

三、code

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
    head->next = NULL;
    struct ListNode* tail = head;
    int carry = 0;
    int l1Val;
    int l2Val;
    while(l1 != NULL || l2 != NULL || carry!=0)
    {
        if(l1 == NULL)
        {
            l1Val = 0;
        }else
        {
            l1Val = l1->val;
        }
        if(l2 == NULL)
        {
            l2Val = 0;
        }else
        {
            l2Val = l2->val;
        }
        
        
        int sum = l1Val +l2Val + carry;
        carry = sum/10;
        struct ListNode* sumNode = (struct ListNode*)malloc(sizeof(struct ListNode));
        sumNode->val = sum%10;
        sumNode->next = NULL;
        tail->next = sumNode;
        tail = sumNode;
        
        if(l1 != NULL) l1 = l1->next;
        if(l2 != NULL) l2 = l2->next;
    }
    return head->next;
}

四、回顾
1 这里的尾部插入,与上一个题中的尾部插入不一样
1) 将当前节点的next值,赋值给新创建的节点,然后再将本节点给加上;
2)生成本节点信息,将该节点信息赋值给链表中最后一个节点,然后再将链表中最后一个指针更新为当前节点;
3)区别有两点,第一是是否继承了上一次链表中,最后一个节点的next值,为空或者为零;选择为零的原因是,此处使用数组模拟链表,初始化的表示下一个值得数组,默认值都为零;
2 当前遇到两种题型,第一是在什么位置插入该节点,第二个是顺序插入,但是插入什么样的节点;
3 一般情况都是尾部插入的方式,以及第一个节点为空;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值