Leetcode445.两数相加 II(C语言)

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;
}
发布了42 篇原创文章 · 获赞 0 · 访问量 611

猜你喜欢

转载自blog.csdn.net/jeanlu/article/details/104248738
今日推荐