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

LintCode連結串列求和221

221.假定用一個連結串列表示兩個數,其中每個節點僅包含一個數字。假設這兩個數的數字順序排列,請設計一種方法將兩個數相加,並將其結果表現為連結串列的形式。
對於這道題,可以先把兩個連結串列翻轉,再依次相加,再把相加的結果再次翻轉。

/**
 * 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 * addLists2(ListNode * l1, ListNode * l2) { if(!l1&&!l2) return NULL; ListNode *head = new ListNode; ListNode *tail = head; ListNode *p1 = reverse(l1);//翻轉連結串列l1 ListNode *p2 = reverse(l2);//翻轉連結串列l2 head->next = NULL; int
val1,val2; int flag = 0; while(p1||p2)//翻轉後的連結串列元素依次相加 { if(p1) { val1 = p1->val; p1 = p1->next; } else val1 = 0; if(p2) { val2 = p2->val; p2 = p2->next
; } else val2 = 0; int temp = flag+val1+val2; flag = temp/10; temp = temp%10; ListNode *pTest = new ListNode; pTest->val = temp; pTest->next = NULL; tail->next = pTest; tail = tail->next; } if(flag) { ListNode *pTest = new ListNode; pTest->val = flag; pTest->next = NULL; tail->next = pTest; } tail = head; head = head->next; delete tail; return reverse(head);//翻轉計算結果 } ListNode * reverse(ListNode *head)//翻轉連結串列 { ListNode *p = new ListNode; ListNode *temp = NULL; p->next = NULL; temp = head; head = p; p = temp; while(p) { temp = p; p = p->next; temp->next = head->next; head->next = temp; } temp = head; head = head->next; return head; } };

相關推薦

LintCode連結串列求和221

221.假定用一個連結串列表示兩個數,其中每個節點僅包含一個數字。假設這兩個數的數字順序排列,請設計一種方法將兩個數相加,並將其結果表現為連結串列的形式。 對於這道題,可以先把兩個連結串列翻轉,再依次相加,再把相加的結果再次翻轉。 /** * Defi

Lintcode 連結串列求和 系列

問題1 描述 你有兩個用連結串列代表的整數,其中每個節點包含一個數字。數字儲存按照在原來整數中相反的順序,使得第一個數字位於連結串列的開頭。寫出一個函式將兩個整數相加,用連結串列形式返回和。 樣例 給出兩個連結串列 3->1->5->null 和 5->9->

Lintcode 連結串列求和系列

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

連結串列求和LintCode

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

lintcode 連結串列倒數第n個節點

lintcode 連結串列倒數第n個節點 每日一練 加油 描述 找到單鏈表倒數第n個節點,保證連結串列中節點的最少數量為n。 樣例 給出連結串列 3->2->1->5->null和n = 2,返回倒數第二個節點的值1. 思路 第一個反應,先

連結串列求和 II

5.11 終於開始做中等難度的題了,也算一個小小的里程碑了吧。 這個題,我是把連結串列轉換成了字串來做的。本來想轉換成整型,但是想一定會越界的,最後還是採用了字串。 就是最後的最後忘記了最高位的進位。 這個題自己感覺還算比較簡單的吧。/** * Definition fo

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連結串列題總結

由於連結串列本身結構的單一性,連結串列的題目很少會有很大的變種,基本都是圍繞幾個基本的考點出題目。所以連結串列的題目比較好掌握,但是連結串列的題目又不太容易一次就AC通過,由於邊界情況未考慮、空指標(比如head.next不存在但是卻給head.next賦值了,就會丟擲nu

lintcode,連結串列排序

在 O(n log n) 時間複雜度和常數級的空間複雜度下給連結串列排序。 樣例 給出 1->3->2->null,給它排序變成 1->2->3->null. 解題思路:根據要求採用先sort再merge的方法,首先找到

java ListNode連結串列求和

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

[lintcode]-連結串列 在O(1)時間複雜度刪除連結串列節點

描述 給定一個單鏈表中的一個等待被刪除的節點(非表頭或表尾)。請在在O(1)時間複雜度刪除該連結串列節點。 樣例 Linked list is 1->2->3->4, and given node 3, delete the node i

LintCode-連結串列插入排序

用插入排序對連結串列排序 樣例 Given 1->3->2->0->null, return 0->1->2->3->null 解題思路:用temp移動,指向head指向的下一個結點。用while迴圈判斷指標指向的下一個地址

LintCode-連結串列劃分

題目描述:給定一個單鏈表和數值x,劃分連結串列使得所有小於x的節點排在大於等於x的節點之前。 你應該保留兩部分內連結串列節點原有的相對順序。 樣例 給定連結串列 1->4->3->2->5->2->null,並且 x=3 返回 1-&g

Lintcode 翻轉連結串列 系列問題

題目1 翻轉連結串列 I 樣例 給出一個連結串列1->2->3->null,這個翻轉後的連結串列為3->2->1->null 這篇文章用圖片很好的解釋了翻轉連結串列的常用的幾種方法 我這裡寫一下方法2,3的python實現。 方法2:每兩個相鄰的節

【兩次過】Lintcode 904. 加一連結串列

給定一個非負整數,這個整數表示為一個非空的單鏈表,每個節點表示這個整數的一位。返回這個整數加一。 除了0本身,所有數字在最高位前都沒有0。 列表的頭節點存的是這個整數的最高位。 樣例 給出連結串列1 -> 2 -> 3 -> null,返回 1 -&g

【三次過】Lintcode 380. 兩個連結串列的交叉

請寫一個程式,找到兩個單鏈表最開始的交叉節點。 樣例 下列兩個連結串列: A: a1 → a2 ↘ c1 → c2 → c3 ↗

【多次過】Lintcode 98. 連結串列排序

在O(n  log  n)時間複雜度和常數級的空間複雜度下給連結串列排序。 樣例 給出  1->3->2->null,給它排序變成  1->2->3->null。 挑戰 分別用歸併排序和快速排序做一遍。

【C++】多項式求和連結串列實現

#include<iostream> using namespace std; struct node //建立結構體,包含係數,指數,指標 { int n; float c; node *next; }; node *create(char M ) /

lintcode 翻轉連結串列

lintcode 翻轉連結串列 描述 翻轉一個連結串列 樣例 給出一個連結串列1->2->3->null,這個翻轉後的連結串列為3->2->1->null 挑戰 在原地一次翻轉完成 思路 在原地反轉,那麼就是一邊迭代一邊跟新

一元多項式求和的兩種實現(陣列和連結串列

一元多項式求和一般都是有兩種實現方式,小編下面就附上我對這兩種方式的理解和實現程式碼。 1.陣列實現。這種方式實現一元多項式加法,是把陣列下標當做一元多項式的指數,在陣列中存放係數。這種方式在實現一元多項是加法是通過遍歷陣列下標來獲取指數資訊,通過指數資訊將係數進行相加。利用陣列在實現一元多項式