/**
* Definition for singly-linked list.
* struct ListNode {
* int val; //存储节点值
* struct ListNode *next; //next是指向下一节点的指针,维持节点连接
* //p->val表示当前位置的值;而p->next表示链表下一个节点
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *a = malloc(sizeof(struct ListNode));//创建一个哑结点
struct ListNode *curr = a;
int carry = 0;
while (l1 != NULL || l2 != NULL) {
int x1 = l1 != NULL ? l1->val : 0;//x1 = l1->val
int x2 = l2 != NULL ? l2->val : 0;//x2 = l2->val
int x = x1 + x2 + carry;//相加的和
struct ListNode *b = (struct ListNode *)malloc(sizeof(struct ListNode));
b->val = x % 10; //创建一个数值为 (sum mod 10)的新结点
//并将其设置为当前结点的下一个结点,然后将当前结点前进到下一个结点
b->next = NULL;
curr->next = b;
curr = curr->next;
carry = x / 10;
if (l1 != NULL) l1 = l1->next;
if (l2 != NULL) l2 = l2->next;
}
if (carry == 1) {//若carry = 1成立则向返回列表追加一个含有数字1的新结点
struct ListNode *b = (struct ListNode *)malloc(sizeof(struct ListNode));
b->val = 1;
b->next = NULL;
curr->next = b;
}
return a->next;//返回哑结点的下一个结点。
}
LeetCode 1 两数相加 c语言
最新推荐文章于 2022-05-09 10:57:52 发布