兩數相加的問題

題目是:給兩個非空的鏈表,表示兩個非負整數。它們每位數都是按照逆序的方式存儲,并且每一個節點只能存儲一位數字。現在兩個數相加,并且以相同的形式返回一個表示和的鏈表

首先回顧一下,什么是鏈表?鏈表是一種數據結構,由一系列的節點組成,每一個節點有兩個部分:一部分是存儲數據元素,一部分是存儲下一個節點地址的指針。

在解答這個題目過程中還運用到進位,進位是一種運算形式,加法運算中,每一數位上的數相加滿十,則用一個高位上的數記其和1

既然是鏈表運算,就先定義一個鏈表節點的構造函數:

 class ListNode {constructor(val, next = null) {this.val = val;this.next = next;}
}

在運算的函數里面,首先要定義一個頭節點:

let Head = new ListNode(0);

定義一個表示當前節點的變量:

let current = Head;

進位標志為:

let carry = 0;

遍歷鏈表:

while (l1 !== null || l2 !== null) { // 當兩個鏈表中任意一個不為空時繼續循環let n1 = l1 === null ? 0 : l1.val; // 若l1為空,則取值為0let n2 = l2 === null ? 0 : l2.val; // 若l2為空,則取值為0let sum = n1 + n2 + carry; // 計算當前位和進位之和carry = Math.floor(sum / 10); // 計算新的進位current.next = new ListNode(sum % 10); // 創建新節點,并設置其值為和除以10的余數current = current.next; // 移動到下一個節點if (l1 !== null) l1 = l1.next; // 移動l1指針if (l2 !== null) l2 = l2.next; // 移動l2指針}

如果進位標志大于0,那就在鏈表后面添加一個新的節點:

  if (carry > 0) {current.next = new ListNode(carry);}

最后返回鏈表。

完整代碼如下:

class ListNode {constructor(val, next = null) {this.val = val;this.next = next;}
}/*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/
var addTwoNumbers = function(l1, l2) {
let dummyHead = new ListNode(0); // 創建一個虛擬頭節點let current = dummyHead; // 當前節點指針,初始指向虛擬頭節點let carry = 0; // 進位標志while (l1 !== null || l2 !== null) { // 當兩個鏈表中任意一個不為空時繼續循環let n1 = l1 === null ? 0 : l1.val; // 若l1為空,則取值為0let n2 = l2 === null ? 0 : l2.val; // 若l2為空,則取值為0let sum = n1 + n2 + carry; // 計算當前位和進位之和carry = Math.floor(sum / 10); // 計算新的進位current.next = new ListNode(sum % 10); // 創建新節點,并設置其值為和除以10的余數current = current.next; // 移動到下一個節點if (l1 !== null) l1 = l1.next; // 移動l1指針if (l2 !== null) l2 = l2.next; // 移動l2指針}// 如果最后還有進位,則在鏈表末尾添加一個新的節點表示這個進位if (carry > 0) {current.next = new ListNode(carry);}return dummyHead.next;
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《異常檢測——從經典算法到深度學習》26 Time-LLM:基于大語言模型的時間序列預測

《異常檢測——從經典算法到深度學習》 0 概論1 基于隔離森林的異常檢測算法 2 基于LOF的異常檢測算法3 基于One-Class SVM的異常檢測算法4 基于高斯概率密度異常檢測算法5 Opprentice——異常檢測經典算法最終篇6 基于重構概率的 VAE 異常檢測7 基于條件VAE異常檢測8 Donut: …

使用遞歸方法和類數組兩種方法計算斐波那契數列

菲波納契數列又稱"菲波納契神奇數列",是由13世紀的意大利數學家菲波納契提出的,當時是和兔子的繁殖問題有關的,它是一個很重要的數學模型。這個問題是:有小兔一對,若第二個月它們成年,第三個月生下小兔一對&…

3333666777

? 通用計算機啟動過程 1??一個基礎固件:BIOS 一個基礎固件:BIOS→基本IO系統,它提供以下功能: 上電后自檢功能 Power-On Self-Test,即POST:上電后,識別硬件配置并對其進行自檢&#xff0c…

阿里云倉庫

倉庫服務 (aliyun.com) maven中央倉庫: Central Repository: (maven.org)

Windows10 安裝Neo4j流程

1、下載并安裝ava運行環境 官網鏈接(需要注冊Oracle賬號):https://www.oracle.com/java/technologies/downloads/ 根據自己Neo4j版本確認需要的JDK版本 百度網盤鏈接: 鏈接:鏈接:https://pan.baidu.com/s/…

靜態網頁和動態網頁的異同

靜態網頁和動態網頁是兩種不同類型的網頁。它們之間的主要異同點如下: 1. 靜態網頁: - 靜態網頁是指在服務器上預先準備好的網頁,內容固定不變。 - 靜態網頁通常由HTML、CSS和JavaScript等靜態文件組成。 - 用戶訪問靜態網頁時&#xff0c…

Sodinokibi勒索病毒最新變種,解密工具更新到2.0版本

Sodinokibi勒索病毒 Sodinokibi勒索病毒又稱REvil,自從2019年6月1日,GandCrab勒索病毒運營團伙宣布停止運營之后,Sodinokibi勒索病毒馬上接管了GandCrab的大部分傳播渠道,同時它也被稱為是GandCrab勒索病毒的“接班人”&#xff…

VMware 虛擬機安裝windows 10操作系統

先提前準備好鏡像文件 1.創建新的虛擬機 2.選擇自定義,然后下一步 v Windows 建議選擇2G以上,下一步 選擇網絡地址轉換(NAT),下一步 這里可按自己的需求來分區,也可以安裝好后再分區 選擇立即重啟&#xff…

【劍指offer】C++ 翻轉字符串里面的單詞

目錄 題目: 思路: 代碼出現 結果 題目: 給定一個字符串,逐個翻轉字符串中的每個單詞。 示例 1: 輸入: "the sky is blue" 輸出: "blue is sky the" 示例 2: 輸入: " hello world! " 輸出: "world! hello" 解釋: 輸入字符…

L1-032 Left-pad(PTA)

文章目錄 L1-032 Left-pad題目描述代碼 L1-032 Left-pad 題目描述 根據新浪微博上的消息,有一位開發者不滿NPM(Node Package Manager)的做法,收回了自己的開源代碼,其中包括一個叫left-pad的模塊,就是這個…

使用 Object.defineProperty() 來進行數據劫持有什么缺點?

使用 Object.defineProperty() 來進行數據劫持有什么缺點? (1)在對一些屬性進行操作時,使用這種方法無法攔截,比如通過下標方式修改數組數據或者給對象新增屬性,這都不能觸發組件的重新渲染,因為…

Vue組件置底方法,ElementPlus布局

問題描述 在開發網頁時使用了elementplus的el-container組件 組件里分成了main和footer兩塊&#xff0c;但是想要將兩個按鈕置底在容器底部遇到了困難 如下圖所示&#xff0c;在網頁開發者工具可見兩個按鈕與左側的圖片沒有底部對齊 此時我的代碼是這樣 <el-footer>&…

STM32自學?串口發送+接收

一、相關函數說明&#xff1a; USART_ClockInit()和USART_ClockStructInit(); 用來配置同步時鐘輸出 USART_DMACmd(); 開啟USART到DMA的觸發通道 USART_SendData(); 發送數據 USART_ReceiveData(); 接收數據 二、程序代碼 serial.c文件 #include "stm32f10x.h" #i…

文件底層的深入理解之文件輸入輸出重定向

目錄 一、文件fd的分配規則 二、對輸出重定向現象的理解 三、輸出輸入重定向的簡單實現 1、輸出重定向 2、輸入重定向 一、文件fd的分配規則 最小的沒有被使用的數組下標&#xff0c;會被分配給最新打開的文件。 二、對輸出重定向現象的理解 正如上面這段代碼所示&#xff0…

C語言實現日本某地發生了一件謀殺案

題目 猜兇手 題目內容&#xff1a; 日本某地發生了一件謀殺案&#xff0c;警察通過排查確定殺人兇手必為4個嫌疑犯的一個。 以下為4個嫌疑犯的供詞: A說&#xff1a;不是我。 B說&#xff1a;是C。 C說&#xff1a;是D。 D說&#xff1a;C在胡說 已知3個人說了真話&…

從零開始學習Netty - 學習筆記 -Netty入門【半包,黏包】

Netty進階 1.黏包半包 1.1.黏包 服務端代碼 public class HelloWorldServer {private static final Logger logger LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventL…

Ubuntu上Jenkins自動化部署Gitee上VUE項目

文章目錄 1.安裝NodeJS插件2.配置全局工具配置-NodeJS環境變量3.新建自由風格的軟件項目任務4.配置General配置丟棄舊的構建配置參數化構建過程 5.配置源碼管理6.構建觸發器7.設置構建環境8.配置構建步驟9.配置構建后操作10測試構建 前文鏈接&#xff1a; Ubuntu上Jenkins自動…

java常用應用程序編程接口(API)——Instant,DateTimeFormatter,Period,Duration概述

前言&#xff1a; 整理下學習心得。打好基礎&#xff0c;daydayup&#xff01; Instant Instant是時間線上的某個時刻/時間戳&#xff0c;通過獲取Instant的對象可以拿到此刻的時間&#xff0c;該時間由兩部分組成&#xff1a;1&#xff0c;從1970年1月1日00:00:00開始走到此刻…

前端開發 VSCode 插件推薦

1、Chinese (Simplified) (簡體中文) Language Pack for Visual Studio Code VS Code 的中文&#xff08;簡體&#xff09;語言包&#xff0c;此中文&#xff08;簡體&#xff09;語言包為 VS Code 提供本地化界面。 下載地址&#xff1a;Chinese (Simplified) (簡體中文) La…