中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

[LeetCode]2. Add Two Numbers

發布時間:2020-08-11 05:18:01 來源:網絡 閱讀:252 作者:風子余 欄目:編程語言

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8


根據給定的兩個非負數組成的鏈表,對鏈表相應位值相加后組成一個新的鏈表,并返回。若相加和大于等于10,則該節點值為減10后的差,并向后一節點進一。


解題:

1)若傳入兩鏈表為空,則返回空鏈表;若鏈表l1為空,則直接返回鏈表l2即可;若鏈表l2位空,則直接返回鏈表l1即可

2)若兩鏈表都不為空,則同時進行遞增,直到有一個鏈表為空為止。

3)若一個鏈表為空,另一鏈表不為空,則遞增不為空鏈表,直到為空。

4)最后檢查最后一個節點是否有進位,若有,則再新增相應節點。否則,返回鏈表。

說明:

1)flag定義為進位值,若和大于等于10,則flag置1,否則flag置0.

2)head指向頭節點,last指向尾節點。

3)新增節點時,先將last節點的next指向新增節點。再把新增節點賦值給last.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) 
{
    if ( l1 == NULL && l2 == NULL )
    {   
        return NULL;
    }   
    
    if ( l1 == NULL )
    {   
        return l2; 
    } 
      
    if ( l2 == NULL )
    {   
        return l1; 
    }   
    
    int flag = 0;
    struct ListNode *head = NULL;
    struct ListNode *last = head;
    while ( l1 != NULL && l2 != NULL )
    {
        int val = 0;
        struct ListNode *node = NULL;
        node = (struct ListNode *)malloc(sizeof(struct ListNode *));
        if ( node == NULL )
        {
            return head;
        }
        val = l1->val + l2->val + flag;
        if ( val >= 10 )
        {
            val -= 10;
            flag = 1;
        }
        else
        {
            flag = 0;
        }
        node->val  = val;
        node->next = NULL;
        if ( head == NULL )
        {
            head = node;
            last = head;
        }
        else
        {
            last->next = node;
            last = node;
        }
        l1 = l1->next;
        l2 = l2->next;
    }
    while ( l1 == NULL && l2 != NULL )
    {
        int val = 0;
        struct ListNode *node = NULL;
        node = (struct ListNode *)malloc(sizeof(struct ListNode *));
        if ( node == NULL )
        {
            return head;
        }
        
        val = l2->val + flag;
        if ( val >= 10 )
        {
            val -= 10;
            flag = 1;
        }
        else
        {
            flag = 0;
        }
        node->val  = val;
        node->next = NULL;
        last->next = node;
        last = node;
        l2 = l2->next;
    }
    
    while ( l1 != NULL && l2 == NULL )
    {
        int val = 0;
        struct ListNode *node = NULL;
        node = (struct ListNode *)malloc(sizeof(struct ListNode *));
        if ( node == NULL )
        {
            return head;
        }
        
        val = l1->val + flag;
        if ( val >= 10 )
        {
            val -= 10;
            flag = 1;
        }
        else
        {
            flag = 0;
        }
        node->val  = val;
        node->next = NULL;
        last->next = node;
        last = node;
        l1 = l1->next;
    }
    
    if ( l1 == NULL && l2 == NULL && flag == 1 )
    {
        struct ListNode *node = NULL;
        node = (struct ListNode *)malloc(sizeof(struct ListNode *));
        if ( node == NULL )
        {
            return head;
        }
        node->val  = 1;
        node->next = NULL;
        last->next = node;
        last = node;
    }
    return head;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磴口县| 安塞县| 瓮安县| 长乐市| 无棣县| 景洪市| 和顺县| 开平市| 广平县| 瓦房店市| 菏泽市| 仁怀市| 兰坪| 徐水县| 额尔古纳市| 博客| 新河县| 滦平县| 宝清县| 汾阳市| 台安县| 沁阳市| 永泰县| 永登县| 黄平县| 新郑市| 耿马| 贵港市| 宿迁市| 崇信县| 瑞丽市| 青阳县| 察雅县| 孙吴县| 古丈县| 苏尼特左旗| 定襄县| 织金县| 平顺县| 五莲县| 灵宝市|