1. 程式人生 > >用連結串列表示的兩個數相加

用連結串列表示的兩個數相加

1 題目

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

Input: (2 -> 4 -> 3)+ (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

2 分析

該題目屬於連結串列的相加,需要注意的有:

(1) 考慮兩個連結串列的長度,尤其是連結串列為空時也能處理。

(2) 每個結點只表示一位數字。

(3) 當連結串列末尾結點相加後若有進位,則需要申請新的結點儲存資訊。

3 實現

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *    int val;
 *    ListNode *next;
 *    ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 
intlistLength(ListNode* head)
{
      return head ? 1 + listLength(head ->next) : 0;
}
 
ListNode*Solution::addTwoNumbers(ListNode *l1, ListNode *l2)
{
      if (listLength(l1) < listLength(l2))
      {
             return addTwoNumbers(l2, l1);
      }
      ListNode *head1 = l1, *head2 = l2;
      int inc = 0;
      bool isEnd = false;
      while (head2)
      {
             int val = head1 -> val + head2-> val + inc;
             head1 -> val = val % 10;
             inc = val / 10;
             if (head1 -> next)
             {
                    head1 = head1 -> next;
             }
             else
             {
                    isEnd = true;
             }
             head2 = head2 -> next;
      }
      while (inc)
      {
             int val = isEnd ? inc : head1 ->val + inc;
             if (isEnd)
             {
                    head1 -> next = newListNode(val % 10);
             }
             else
             {
                    head1 -> val = val % 10;
             }
             inc = val / 10;
             if (head1 -> next)
             {
                    head1 = head1 -> next;
             }
             else
             {
                    isEnd = true;
             }
      }
      return l1;
}


相關推薦

連結串列表示個數相加

1 題目 You are giventwo linked lists representing two non-negative numbers. The digits are storedin reverse order and each of their nodes c

Leetcode Add Two Numbers 連結串列表示的數相加

題目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their no

2.連結串列表示多項式

最近真是被數字邏輯電路和高數折磨得夠嗆。 抽出時間 堅持更新! 今天我們談一談凡是談連結串列都一定會提到的多項式問題。 看問題! 定義多項式F(X)=∑ni=0aiXi,我們如何在計算機中儲存這個多項式? 1.用簡單陣列來儲存多項式的係數   顯然,假設這個多項式有n項,我們需要一

連結串列實現相加

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -

Add Two Numbers(基於連結串列相加

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their node

連結串列實現個集合求並集

 #include<stdio.h> #include<stdlib.h> #include<time.h>  typedef struct node{      int data;      struct node *next;  } LinkList;  LinkLis

[LeetCode刷題菜鳥集] 2. Add Two Numbers 單鏈表表示個數相加

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7

PTA 個有序連結串列序列的交集 (很簡單 不是連結串列做的)

 兩個有序連結串列序列的交集 (20 分) 已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的交集新連結串列S3。 輸入格式: 輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用−1表示序列的結尾(−1不屬於這個序列)。數字用空格間隔。 輸出格式:

【LeetCode-面試演算法經典-Java實現】【002-Add Two Numbers (單鏈表表示個數相加)】

原題   You are given two linked lists representing two non-negative numbers. The digits are stor

連結串列實現個數字相加

兩個用連結串列表示的數字相加 https://leetcode.com/problems/add-two-numbers/ You are given two linked lists representing two non-negative number

LeetCode2——Add Two Numbers(連結串列中的數字相加,形成新連結串列

鄙人不才,故收錄LeetCode中的解法和程式碼。 題目: 參考解法: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *n

【002-Add Two Numbers (單鏈表表示個數相加)】

package algorithm; import java.lang.ref.WeakReference; /* 2個正數相加,該正數用連結串列表示,正數反向儲存(最低位先存) 原題   You are given two linked lists repre

02027_線程池練習:返回個數相加的結果

turn mage 操作 ima execution task ati 實現類 res 1、要求:通過線程池中的線程對象,使用Callable接口完成兩個數求和操作。 2、代碼實現:   (1)Callable接口實現類 1 import java.util.concu

棧的建立-----連結串列實現棧

設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT  publi

Java連結串列實現棧

上一篇實現了佇列,這一篇我們實現棧。 棧是後入先出的資料結構。 連結串列中插入資料有頭插法和尾插法,本篇我們使用頭插法。 不多說直接上程式碼 連結串列的節點定義和上一篇使用的是同一個,可以參考上一篇。 public class StackImpl<T> { p

Java連結串列實現佇列

佇列--先入先出 棧---後入先出 連結串列實現佇列和棧。首先我們需要構建一個連結串列。連結串列有哪幾要素?   1、連結串列本身的value 2、連結串列的next指標,next指標指的還是同樣型別的值。 下邊看程式碼 public class Element&l

簡單演算法題-個數相加

簡單演算法題-兩個數相加 題目的大意大概是這個樣子的: 給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。 你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因

MFC版連結串列實現稀疏多項式相加

連結串列實現多項式運算(加減)MFC視覺化版 題目 設計一個一元稀疏多項式簡單計算器。 基本要求 (1)輸入並建立兩個多項式; (2)多項式a與b相加,建立和多項式c; (3)多項式a與b相減,建立差多項式d; (4)輸出多項式a, b, c, d。輸出格式:比如多項式a為:A(x)=c1xe1

Java演算法給定一個整數陣列,找出其中個數相加等於目標值

給定一個整數陣列,找出其中兩個數相加等於目標值  例如:給定陣列及目標值 nums = [2,7,11,15] ,target = 9  因為nums[0] + nums[1] = 2 + 7 = 9  返回[0,1] /** * 使用輔助空間(使用雜湊表

十三 連結串列實現棧

用連結串列實現棧:     連結串列棧: package com.lt.datastructure.stackqueue; /* * 使用連結串列實現棧 */ public class LinkedListStack<E> implements Stack