由力扣 02 两数相加最简解法,学习到的编程思维

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int c=0;
struct ListNode *head,*cur,*next;
head=(struct ListNode *)malloc(sizeof(struct ListNode));
head->next=NULL;
cur=head;
while(l1!=NULL||l2!=NULL||c){
next=(struct ListNode *)malloc(sizeof(struct ListNode));
next->next=NULL;
cur->next=next;
cur=next;
l1!=NULL?(c+=l1->val,l1=l1->next):(c+=0);
l2!=NULL?(c+=l2->val,l2=l2->next):(c+=0);
cur->val=c%10;
c=c/10;
}
return head->next;
}https://leetcode-cn.com/problems/add-two-numbers/solution/zui-jian-xie-fa-by-baal-3/

使用尾插法进行顺序输出,这里比较基础,属于常识;
接下来作者对于进位计算和两链表不同时的情况处理极为简单,
对于我这个弱鸡而言,并没有想到可以使用一个根据链表长度不同分别求和,我当时只会 sum = l1 -> val+ l2 -> val;这样无疑是限制了代码的灵活性,
在解题的过程中,没有学会从整体思考,多个方向思考。
而这位大佬 l1!=NULL?(c+=l1->val,l1=l1->next):(c+=0);
l2!=NULL?(c+=l2->val,l2=l2->next):(c+=0);
通过这两句代码,实现了对链表长度不一样时的处理,用参数c实现了分别求和,拜托了用sum的机械和僵硬;
while(l1!=NULL||l2!=NULL**||c**)
cur->val=c%10;
c=c/10;

通过处理参数c,实现了对出现进位情况的处理。 也可以处理3位数相加,结果为4位数的情况;而我遇到这种情况,一般是考虑分为两个模块,一个只写三位数相加,结果为三位数;一个写三位数相加,结果4位数。
不够简解,但是听学长说,现在流行模块编程,但我觉得我这个情况,完全是太繁琐。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值