leetcode 第2题【两数相加】C语言

leetcode 第2题【两数相加】

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) 
{
    int t=0; /*储存进位数*/
    struct ListNode* first=NULL;  /*定义头节点*/
    struct ListNode* end=NULL;    /*定义尾节点*/
    while(l1||l2) /*其中一个不为空*/
    {
        int n1=  l1 ? l1->val : 0;  /*三目运算符,l1不为空返回其所指的值,否则返回0*/
        int n2=  l2 ? l2->val : 0;
        int sum=n1+n2+t;
        if(!first)
        {
            first=end=malloc(sizeof(struct ListNode)); /*按结构体分配内存*/
            end->val=sum%10;   
            end->next=NULL;  /*这里我理解是为这个链表进行一个结尾,后面有需要还可以再分配*/
        }
        else
        {
            end->next=malloc(sizeof(struct ListNode));
            end->next->val=sum%10;
            end=end->next; /*结尾操作*/
        }
        t=sum/10; /*算进位数*/
        if(l1)
        {
            l1=l1->next;
        }
        if(l2)
        {
            l2=l2->next;
        }
    }
    if(t) /*官方解答这个if判断是在循环体里面,放外面也一样,缩小一下循环体*/
    {
    		 end->next=malloc(sizeof(struct ListNode));
    		 end->next->val=t; /*这里很重要,当链表循环结束,还有进位数未放进去的时候,需要把最后一个进位数单独填入,前面则是直接加起来了*/
    		 end->next->next=NULL; /*这里同样是对链表进行一个结尾*/
    }
    return first; /*返回*/
}

总结知识点:结构体定义、指针、三目运算符、循环体、链表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值