leecode题号2(两数相加,C语言完成),求大神帮忙看看错在哪里。。。

iam氯化钠 2019-11-04 08:54:45
初学链表,对链表的使用还不太熟悉,麻烦各位帮忙看看错在哪里

题干如下:


我的解答:

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


struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
//遍历两个链表,已得到二者各自的长度
struct ListNode*last1=l1;//定义last1以便于遍历l1(last指向最后一个节点)
int len1=0,len2=0,len;
for(;last1->next;len1++){
last1=last1->next;
}
struct ListNode*last2=l2;//定义last2以便于遍历l2(last指向最后一个节点)
for(;last2->next;len2++){
last2=last2->next;
}
//比较两个链表的长度,短的链表延长并用零补齐
if(len1<len2){
len=len2;
for(int i=0;i<len2-len1;i++){
struct ListNode*pn=(struct ListNode*)malloc(sizeof(struct ListNode));//定义指向新节点的pn,以创建新节点
pn->val=0;
pn->next=NULL;
last1->next=pn;//把新节点接到last1上去
last1=last1->next;
}
}
else if(len1>len2){
len=len1;
for(int i=0;i<len1-len2;i++){
struct ListNode*pn=(struct ListNode*)malloc(sizeof(struct ListNode));//定义指向新节点的pn,以创建新节点
pn->val=0;
pn->next=NULL;
last2->next=pn;//把新节点接到last2上去
last2=last2->next;
}
}
//两个链表对应节点分别求和,并将结果放到第三个链表对应节点处
struct ListNode*p3=(struct ListNode*)malloc(sizeof(struct ListNode));//新建用于储存结果的新链表p3
int mod=0;//定义决定进位的余数
p3->next=NULL;
p3->val=(l1->val+l2->val+mod)%10;
mod=(p11->val+p22->val+mod)/10;
struct ListNode*last3=p3;//定义指向尾部的指针
l1=l1->next;
l2=l2->next;
for(int i=0;i<len;i++){
struct ListNode*node=(struct ListNode*)malloc(sizeof(struct ListNode));//新节点
node->next=NULL;
node->val=(l1->val+l2->val+mod)%10;
mod=(p11->val+p22->val+mod)/10;
last3->next=node;//新节点加到新链表上
last3=last3->next;
l1=l1->next;
l2=l2->next;

}
return p3;
}
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iam氯化钠 2019-11-05
  • 打赏
  • 举报
回复
可能是我太菜了,不过还是多谢了哈
pro_or_check 2019-11-05
  • 打赏
  • 举报
回复
粗略看了一下,好像不需要这么长,一定可以简化,加油(ง •̀_•́)ง
wowpH 2019-11-04
  • 打赏
  • 举报
回复
可优化一下。将l1保存长的,l2保存短的。如果l1比l2短,互换一下头指针再给l2补0。
wowpH 2019-11-04
  • 打赏
  • 举报
回复
如果两个一样长,你的len还未赋值。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧