LeetCode 2. 两数相加(自用)
原题链接
中等
作者:
𫠊_
,
2024-02-02 22:37:10
,
所有人可见
,
阅读 35
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
// 创造一个头结点,让头指针head指向它
struct ListNode* head = malloc(sizeof(struct ListNode));
// 创造一个指针,让cur指向head指向的头结点
struct ListNode* cur = head;
// 创造一个进位判断值
int carry = 0;
// 循环(l1指向非空 或 l2指向非空 或 进位值非空)就执行
while(l1 || l2 || carry){
// 如果l1指向非空,则将l1的值加到carry上,l1指向l1的下一个结点
if(l1) {
carry += l1->val;
l1=l1->next;
}
// 如果l2指向非空,则将l2的值加到carry上,l2指向l2的下一个结点
if(l2) {
carry += l2->val;
l2=l2->next;
}
// 创造一个结点,赋值。本来没想给新结点的next赋值,可是报错啊,百度了一下,不赋值就是野指针,C语言不允许
cur->next = malloc(sizeof(struct ListNode));
cur->next->val = carry % 10;
cur->next->next = NULL;
// cur指向下一个,也就是cur指向了新结点。
cur = cur->next;
carry /= 10;
}
// 返回头指针指向的下一个结点
return head->next;
}