69,336
社区成员
发帖
与我相关
我的任务
分享
/**
* 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;
}