LeetCode 02 两数之和
- Brief : in C lanuage LeetCode 02
- Author:Dargon
- Note date:2021/03/08
01 目前的思路
- 两个链表的相加 每一个节点 表示一位数字 相加最多知识两位数 我们只要把位和 sum sum%10 得出该位 对应的数字 sum/10 得出进位的数字 利用carry记录 加到前一位
- 在一个大循环 里面 每一位都对应着进行 上述的操作 直到所有的位都指向 null的问题
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;
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%
的用户