02两数之和

LeetCode 02 两数之和

01 目前的思路

  • 两个链表的相加 每一个节点 表示一位数字 相加最多知识两位数 我们只要把位和 sum sum%10 得出该位 对应的数字 sum/10 得出进位的数字 利用carry记录 加到前一位
  • 在一个大循环 里面 每一位都对应着进行 上述的操作 直到所有的位都指向 null的问题
/*
 * @lc app=leetcode.cn id=2 lang=c
 *
 * [2] 两数相加
 */

// @lc code=start
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

typedef struct ListNode ListNode_t;

ListNode_t *CreatNode( int val ) {
    ListNode_t *node =( ListNode_t * )malloc( sizeof( ListNode_t ) );
    node->val =val;
    node->next =0;
    return node;
}

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
    ListNode_t *root =CreatNode( 0 );
    ListNode_t *cursor =root;
    int carry =0;
    int l1val, l2val, sumval;
    /* carry 针对最后一位要求设置 */
    while( l1 !=0 || l2 !=0 || carry !=0 ) {
        l1val =( l1 !=0 ? l1->val : 0 );
        l2val =( l2 !=0 ? l2->val : 0 );
        sumval =l1val +l2val +carry;
        carry =sumval / 10;

        ListNode_t *sumnode =CreatNode( sumval %10 );
        cursor->next =sumnode;
        cursor =sumnode;

        if(l1) l1 =l1->next;
        if(l2) l2 =l2->next;
    }
    return root->next;
}

02 执行结果

执行用时:
16 ms
, 在所有 C 提交中击败了
80.20%
的用户
内存消耗:
7.6 MB
, 在所有 C 提交中击败了
37.83%
的用户
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值