leetcode刷題第二天<兩數相加>

来源:https://www.cnblogs.com/kk328/archive/2019/02/26/10440625.html
-Advertisement-
Play Games

題目描述給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例:輸入:(2 -> 4 -> ... ...


題目描述

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。

如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

首先是c++

最開始採用官方題解java該c++版本的,代碼如下

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* dummyHead = new ListNode(0);
        ListNode* p = l1;
        ListNode* q = l2;
        ListNode* curr = dummyHead;
        int carry = 0;
        while (p != 0 || q != 0) {
            int x = (p != 0) ? p->val : 0;
            int y = (q != 0) ? q->val : 0;
            int sum = carry + x + y;
            carry = sum / 10;
            curr->next = new ListNode(sum % 10);
            curr = curr->next;
            if (p != 0) p = p->next;
            if (q != 0) q = q->next;
        }
        if (carry > 0) {
            curr->next = new ListNode(carry);
        }
        return dummyHead->next;
    }
};

思路為申請一個新的鏈表空間進行存儲,然後分別進行鏈表的傳遞,接著判斷鏈表的值與0的關係返回,最後求和,然後%10取餘數,最後判斷餘數和和0的關係,然後返回即可

另外一種大佬解法

是申請兩個鏈表的空間,然後如果鏈表不為空進行遍歷相加,最後在判斷鏈表和餘數與9的關係,最後返回第二個鏈表空間。

代碼如下

class Solution 
{
public:
   
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) 
{
        ListNode* list_head= new ListNode(0);
       
 ListNode* list_node=list_head;
        
while(1)
        
{
            int sum=list_node->val;
       
 if(l1)
       
 {
            sum+=l1->val;
            l1=l1->next;
        }
        
if(l2)
       
 {
            sum+=l2->val;
            l2=l2->next;
        }
     
   list_node->val=sum%10;
        if(l1||l2||sum>9)
        
{
            list_node->next=new ListNode(sum/10);
            
list_node=list_node->next;
        }
       
 else{
            break;
        }
    }
   
   return list_head;
    }
};

最後再用python走下

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        add_num = 0
        new_list = ListNode(0)
        cur = new_list
        cur1 = l1
        cur2 = l2
        while cur1 or cur2:
            if cur1 and cur2:
                value = cur1.val + cur2.val + add_num
            elif cur1:
                value = cur1.val + add_num
            elif cur2:
                value = cur2.val + add_num
                
            cur.next = ListNode(value % 10)
            add_num = 0
            if value > 9:
                add_num = 1
            cur = cur.next
            if cur1:
                cur1 = cur1.next
            if cur2:
                cur2 = cur2.next
        if add_num:
            cur.next = ListNode(add_num)
            cur = cur.next
        return new_list.next

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開學兩天,身上的職責直接變為兩個班班長,三個小組組長,哇這事情估計夠我忙活了,想躲都躲不掉啊,看來我還是真招人推薦各種管理職務啊,以後要是有人推薦我當經理啊領導啊該多好哈哈哈哈。記得今天奶奶生日,很開心地給奶奶打了一通電話,這怕是我第一次給奶奶電話送生日祝福了哈哈哈,是啊,很想珍惜身邊的人,但很多時 ...
  • 導師359213571如果你是剛剛玩,我來教教你,如果你已經玩很久了,卻不穩,我來拉拉你,如果你已經遍體鱗傷,我來幫幫你. 我不能保證你一夜致富但希望能細水長流,匯聚江海,先要平穩的心態,不要一盤的失誤影響你心情。 自己有規劃性和目標性。做到這兩點,過來找我我來幫你。 1、死跟計劃。現在很多群里都有 ...
  • Java基礎知識篇 面向對象和麵向過程的區別 面向過程: 優點:性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、Linux/Unix等一般採用面向過程開發,性能是最重要的因素。 缺點:沒有面向對象易維護、易復用、易擴展 面向對象: 優點:易維護、易復用、易 ...
  • 導師359213571如果你是剛剛玩,我來教教你,如果你已經玩很久了,卻不穩,我來拉拉你,如果你已經遍體鱗傷,我來幫幫你. 我不能保證你一夜致富但希望能細水長流,匯聚江海,先要平穩的心態,不要一盤的失誤影響你心情。 自己有規劃性和目標性。做到這兩點,過來找我我來幫你。 1、死跟計劃。現在很多群里都有 ...
  • 導師3592135711、死跟計劃。現在很多群里都有計劃,大家都在跟計劃,一起交流但計劃只是一款軟體經過某種運算得出來的數,但大家都在跟計劃,為什麼有的人贏了,有的人輸了,這就是要會跟計劃,計劃不能盲目跟從。不能每期都買,不能每期都跟,每期都跟計劃的,跟的越緊死得越快!切記!不存在一款也已預測未來的 ...
  • 給定一個字元串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。 示例 1:輸入: "babad"輸出: "bab"註意: "aba" 也是一個有效答案。 示例 2:輸入: "cbbd"輸出: "bb" 思路一:暴力法,不說了 思路二:動態規劃 參考官方給的思路: How c ...
  • 對於後臺管理工具,會根據員工的角色不同,從而擁有不同的許可權,所能訪問的頁面不同,首先要給員工分配角色,然後再給角色分配權力,這樣就完成了許可權分配。其實基於stark組件做的許可權管理,我們可以一個一個頁面的去完成許可權分配,但其實我們有更好的方法去實現,把員工、角色、權力都放在一個頁面上,一目瞭然的查看 ...
  • 導師企鵝-359213571如果你此刻十分困難,不要灰心,放平心態,先想想此刻對你來說,到底什麼最為重要,是技術還是本金,是心態還是人脈,把自己梳理清晰,然後設定好步驟,不要慌不要亂,天無絕人之路,勇敢的站起來,你可以的。技術可以通過學習獲得,經驗可以通過實戰得到,心態可以通過調節增強,每一個人都不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...