leetcode刷刷題(33) ---- 鏈表求和(C語言版)

2020-2-15

  • Do not take anyone else’s word about what is right and wrong.
    不要人云亦云。

題目

給定兩個用鏈表表示的整數,每個節點包含一個數位。
這些數位是反向存放的,也就是個位排在鏈表首部。
編寫函數對這兩個整數求和,並用鏈表形式返回結果。

示例:
輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
輸出:2 -> 1 -> 9,即912

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sum-lists-lcci
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

個人解答:(C版本)

  • 就是對應爲相加,然後將結果保存在動態生成的空間,注意的是進位問題。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){

    int carryFlag = 0;
    int sum = 0;
    int oneFlag = 1;
    struct ListNode* l = NULL;
    struct ListNode* q = NULL;
    struct ListNode* p = NULL;
    
    while((NULL != l1) || (NULL != l2))
    {
    	// 給要計算結果儲存分配空間
        p = (struct ListNode*)malloc(sizeof(struct ListNode));
        
        // 第一次進入
        if(1 == oneFlag)
        {
            l = p;
            q = p;
            oneFlag = 0;
        }
        else
        {
            q->next = p;
            q = q->next;
        }
        
        // 判斷三種情況
        if(NULL == l1)
        {
            sum = l2->val + carryFlag;
            l2 = l2->next;
        }
        else if(NULL == l2)
        {
            sum = l1->val + carryFlag;
            l1 = l1->next;
        }
        else
        {
            sum = l1->val + l2->val + carryFlag;
            l1 = l1->next;
            l2 = l2->next;
        }
		
		// 處理進位
        if(sum >= 10)
        {
            carryFlag = 1;
            sum -= 10;
        }
        else
        {
            carryFlag = 0;
        }

        q->val = sum;
    }

    // 如果最後一位還有進位,需要處理
    if(1 == carryFlag)
    {
        q->next = (struct ListNode*)malloc(sizeof(struct ListNode));
        q = q->next; 
        q->val = 1;
        q->next = NULL;
    }
    else
    {
        q->next = NULL;
    }

    return l;
}
  • 結果:
    在這裏插入圖片描述
他山之石:
發佈了251 篇原創文章 · 獲贊 168 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章