LeetCode 1 两数相加 c语言

/**
 * 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;//返回哑结点的下一个结点。
}

猜你喜欢

转载自blog.csdn.net/Yupppppi/article/details/88880604
今日推荐