程序员面试金典-0205-链表求和

程序员面试金典-0205-链表求和

一个有意思的错误:假如没有清理上次的flag,会影响下一次操作
在这里插入图片描述

题目描述:

给定两个用链表表示的整数,每个节点包含一个数位。

这些数位是反向存放的,也就是个位排在链表首部。

编写函数对这两个整数求和,并用链表形式返回结果。

 

示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-lists-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

code:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
static int flag=0;
void insert_node(int t1,int t2,struct ListNode * temp){
    int t = t1+t2+flag;
    if(t>9){
        flag=1;
        t=t-10;
    }
    else{
        flag=0;
    }
    struct ListNode * temp_node = malloc(sizeof(struct ListNode));
    temp_node->val=t;
    temp_node->next=NULL;
    temp->next=temp_node;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    flag=0;
    struct ListNode * p1 = l1;
    struct ListNode * p2 = l2;
    if(p1==NULL && p2==NULL)
        return NULL;
    struct ListNode * ret = malloc(sizeof(struct ListNode));
    ret->val = 0;
    ret->next=NULL;
    struct ListNode * temp = ret;
    while(p1!=NULL && p2!=NULL){
        insert_node(p1->val,p2->val,temp);
        p1=p1->next;
        p2=p2->next;
        temp=temp->next;
    }
    while(p1!=NULL){
        insert_node(p1->val,0,temp);
        p1=p1->next;
        temp=temp->next;
    }
    while(p2!=NULL){
        insert_node(p2->val,0,temp);
        p2=p2->next;
        temp=temp->next;
    }
    if(flag==1){
        struct ListNode * temp_node=malloc(sizeof(struct ListNode));
        temp_node->val=1;
        temp_node->next=NULL;
        temp->next=temp_node;
    }
    return ret->next;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值