Leetcode445.两数相加 II(C语言)
数据结构-链表:算法与数据结构参考
题目:
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。例:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7
思路:
末尾相加,可利用两个栈,重点在于相加后结果链表的处理
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *s1[100],*s2[100];
int top1=-1,top2=-1;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *p1=l1, *p2=l2, *p=NULL;
while(p1){
s1[++top1]=p1;
p1=p1->next;
}
while(p2){
s2[++top2]=p2;
p2=p2->next;
}
int len1=top1,len2=top2;
int sum=0,cont=0;
int a,b;
while(top1!=-1 || top2!=-1){
a=b=0; //每次循环均初始化,使先到达null的链表值则为0
if(top1!=-1) p1=s1[top1--],a=p1->val;
if(top2!=-1) p2=s2[top2--],b=p2->val; //例题中p2先到null,不执行,b=0
p=(len1>len2)?p1:p2;
sum= a+b+ cont;
p->val=sum%10;
cont=sum/10;
}
if(cont){
struct ListNode *s=(struct ListNode *)malloc(sizeof(struct ListNode));
s->next=p;
s->val=cont;
p=s; //在if里定义的s是局部变量,所以要赋值给全局变量p
}
return p;
}