1. 程式人生 > >連結串列求和(LintCode)

連結串列求和(LintCode)

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-two-numbers/ 題目:

你有兩個用連結串列代表的整數,其中每個節點包含一個數字。數字儲存按照在原來整數中相反的順序,使得第一個數字位於連結串列的開頭。寫出一個函式將兩個整數相加,用連結串列形式返回和。

您在真實的面試中是否遇到過這個題? Yes 樣例

給出兩個連結串列 3->1->5->null 和 5->9->2->null,返回 8->0->8->null


難度級別: 容易 思路分析:
本題較為簡單,處理好指標的基本操作就可以了。 需要注意的是,如果兩個數相加結束之後,進位不為零,此時表示,結果值比原來的連結串列要更長一位。 此時需要單獨處理,增加一個節點。 實現程式碼:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    /**
     * @param l1: the first list
     * @param l2: the second list
     * @return: the sum list of l1 and l2 
     */
    ListNode *addLists(ListNode *l1, ListNode *l2) {
        // write your code here
        if (l1 == NULL)
        {
            return l2;
        }else if (l2 == NULL)
        {
            return l1;
        }
        int c = 0;
        int temp = 0;
        ListNode *head = new ListNode(0);
        ListNode *p = head;
        while (l1 != NULL && l2 != NULL)
        {
            temp = l1->val+l2->val + c;
            c = temp/10;
            temp = temp%10;
            p->next = new ListNode(temp);
            p = p->next;
            l1 = l1->next;
            l2 = l2->next;
        }
        while (l1 != NULL)
        {
            temp = l1->val + c;
            c = temp/10;
            temp = temp%10;
            p->next = new ListNode(temp);
            p = p->next;
            l1 = l1->next;
        }
        while (l2 != NULL)
        {
            temp = l2->val + c;
            c = temp/10;
            temp = temp%10;
            p->next = new ListNode(temp);
            p = p->next;
            l2 = l2->next;
        }
        if (c != 0)
        {
            p->next = new ListNode(c);
        }
        return head->next;
    }
};


程式碼說明: 實現程式碼中變數說明: c表示進位 temp表示臨時和

相關推薦

連結串列求和LintCode

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-two-numbers/ 題目: 你有兩個用連結串列代表的整數,其中每

資料結構與演算法之連結串列

連結串列作為一種基礎的資料結構之一,我們會常常使用到它,接下來就讓我們一起學習吧。 1、連結串列的經典應用場景: LRU快取淘汰演算法。 2、快取是一種提高資料讀取效能的技術,在硬體設計、軟體開發中都有著非常廣泛的應用,比如常見的CPU快取、資料庫快取、瀏覽器快取等等。

資料結構與演算法之連結串列

Q:如何輕鬆寫出正確的連結串列程式碼? 總結起來,就是投入時間+技巧; 一、投入時間:          只要願意投入時間,大多數人都是可以學會的,比如說,如果你真能花上一個週末或者一整天時間,就去寫連結

程式設計師程式碼面試指南 —— 連結串列問題

題目:將單鏈表的每K個節點之間逆序 描述:給定一個單鏈表的頭結點head,實現一個調整單鏈表的函式,使得每K個節點之間逆序,如果最後不夠K個節點一組,則不調整最後幾個節點 例如: 連結串列 1—>2—>3—>4—>5—>6—>7—>8—>nul

程式設計師程式碼面試指南 —— 連結串列問題

題目:複製含有隨機指標節點的連結串列 描述:有一種連結串列節點類描述如下: public class Node { public int value; public Node next; public Node rand; public Node(int data){ this.value

程式設計師程式碼面試指南 —— 連結串列問題

題目:給定一個連結串列的頭節點head,請你判斷是否為迴文結構 例如:1 —> 2 —> 1 ture 1 —> 2 —> 2 —> 1 true 1 —> 2 —> 3 flase 思路:可以使用棧這種資料結構,可以將整個單向連結串列分為前半區和後

程式設計師程式碼面試指南 —— 連結串列問題

注:題目來自於《程式設計師程式碼面試指南:IT名企演算法與資料結構題目最優解》,該書是左程雲老師的著作,值得推薦,這裡僅是記錄一下該書中題目的解法和個人理解 題目一:在單鏈表和雙鏈表中刪除倒數第K個節點 描述:   分別實現兩個函式,一個可以刪除單鏈表中倒數第K個節點,另一個可以刪除雙鏈

單向連結串列反轉倒置問題

今天遇到單向連結串列的反轉的問題,於是靜下心來好好想了一番。 解題思路如下圖: 假設當前建立好的連結串列如下: 首先讓頭節點與第一個元素節點斷開,但是要注意在斷開之前需要用p指標指向第一個元素節點來儲存第一個元素節點的位置,然後再斷開。在這裡有一個指標

面向物件之Python的連結串列實現迴圈連結串列

接上一章的練習,這裡接著實現單鏈表的變型——傳說中的迴圈單鏈表。給出一個簡單的類,構造4個功能並例項化測試。 在下一篇文章中將會關注一個比較tricky的問題:如何判斷連結串列有環?以及求出環長度 # -*- coding: utf-8 -*- """ Created

二進位制求和LintCode

題目來源:LintCode 原題地址:http://www.lintcode.com/zh-cn/problem/add-binary/ 題目: 給定兩個二進位制字串,返回他們的和(用二進位制

靜態記憶體分配-連結串列管理1單向量表講解

單向連結串列 單向量表有頭節點 和節點組成,頭節點主要是管理連結串列使用,節點組成資料。 資料結構 **last指向尾節點的Next指標,在節點尾部插入節點時,直接調整頭節點的last內容的指向即可在尾部插入。first指標指向連結串列的首節點。

連結串列初解——佇列的入隊和出隊

自己複習了一下簡單佇列的基本操作,其中要注意的是隊頭和隊尾要始終保持位置正確~還是老習慣,上程式碼+註釋啦~ Code: #include<iostream> using namespace std; typedef struct node { int da

程式設計練習:連結串列習題

(1)題目:輸入兩個連結串列,找出它們的第一個公共節點。 思路: 1)計算出連結串列1的長度; 2)計算出連結串列2的長度; 3)計算出連結串列1和連結串列2的長度差dif;

在O(1)時間複雜度刪除連結串列節點372

資料結構—線性結構—連結串列:(在O(1)時間複雜度刪除連結串列節點)一、題目:給定一個單鏈表中的一個等待被刪除的節點(非表頭或表尾)。請在在O(1)時間複雜度刪除該連結串列節點。樣例:Linked l

連結串列學習3

1、線性結構與非線性結構,主要看元素之間的關係。若是一對一關係就是線性表,如果不是一對一就是非線性。 2、LS=((a,b,c),(d,e,f)); tail(LS)=((d,e,f)); head

1建立二叉樹的二叉連結串列2寫出對用二叉連結串列儲存的二叉樹進行先序、中序和後序遍歷的遞迴和非遞迴演算法。 3寫出對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。 4求二叉樹的所有葉子及結點總數。

(1)建立二叉樹的二叉連結串列。 (2)寫出對用二叉連結串列儲存的二叉樹進行先序、中序和後序遍歷的遞迴和非遞迴演算法。 (3)寫出對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。(4)求二叉樹的所有葉子及結點總數。 include<stdio.h> #inclu

連結串列初解——單鏈表的建立、刪除、插入、測長、排序、逆置

由於考試需要,複習一下單鏈表的各種常見操作,直接上程式碼+註釋,需要的可以參考下哈~ Code: #include<iostream> using namespace std; typedef struct student { int data; str

Add Two Numbers兩個連結串列求和

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain

合併兩個排序連結串列LintCode

實現程式碼:#include <iostream> using namespace std; //Definition of ListNode class ListNode { public: int val; ListNode *next; ListNode(int

判斷連結串列相交,若相交,求交點。假設連結串列可能帶環

首先我們分析,兩個連結串列是否相交,是否帶環,有以下幾種情況: 求兩個連結串列是否帶環可以分成三個情況: 1.都不帶環,可以轉換成兩個連結串列是否相交的問題。 2.一個帶環,一個不帶環。–>不相交 3.都帶環:    分別求環的入口點     1.入口點