LeetCode:Add Two Numbers
markdownで書くのは初めてですね.もともと書くのが少ないので、やってみましょう.
タイトル:You are given two linked lists representing two non-negative numbers.The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
タイトルの大意は2つのチェーンテーブルを与えて、各チェーンテーブルは1つの整数を代表して、しかしすべての人はすべて1つのノードの中で保存して、今あなたに2つのチェーンテーブルをあげて、2つのチェーンテーブルを加えて、そしてチェーンテーブルの頭に戻って、私が考えることができるのは2つの考え方があります:まず2つのチェーンテーブルの中の値を求めて、それから加算して、最後に得た値の一人一人を新しいチェーンテーブルを再作成して、チェーンテーブルの頭に戻って、チェーンテーブルの中の値が大きいかもしれないので、これはc++で書いて、あまり使いにくいかもしれません.大数加算はjavaがなくて便利で、これは書いていません.後で考えてみると、この考えはいいですが、通過できないと思います.書いてみると、BigIntegerというクラスを識別できません. 直接加算、キャリー処理.
このプログラムは3、4時間くらい書いてあるので、ゆっくりしましょう.まず出会った問題やよく知っていることを話しましょう.ゆっくり書いて完成できますが、よく知りません.1.チェーンテーブルを作成するとき、最後の要素にNULLを割り当てないでください.これはデッドサイクルです.mallocというヘッダファイルはstdlibに含まれています.hこのヘッダファイルの中にあります.2.多くのテスト例が通じないような気がしますが、leetcodeはテスト例を示しています.これはいいと思います.間違っていますが、どこが間違っているか知っています.ゆっくりデバッグすることができます.3.malloc新しいnodeを作るときは、このnode->nextはすべてNULLを与えたほうがいい.
タイトル:You are given two linked lists representing two non-negative numbers.The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
タイトルの大意は2つのチェーンテーブルを与えて、各チェーンテーブルは1つの整数を代表して、しかしすべての人はすべて1つのノードの中で保存して、今あなたに2つのチェーンテーブルをあげて、2つのチェーンテーブルを加えて、そしてチェーンテーブルの頭に戻って、私が考えることができるのは2つの考え方があります:
#include <iostream>
#include <stdlib.h> // malloc
using namespace std;
/** * Add Two Numbers Total Accepted: 55484 Total Submissions: 251336 My Submissions Question Solution * You are given two linked lists representing two non-negative numbers. * The digits are stored in reverse order and each of their nodes contain a single digit. * Add the two numbers and return it as a linked list. * Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) * Output: 7 -> 0 -> 8 */
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// ,
ListNode * CreateLinkList(int a[], int n)
{
ListNode * head = (ListNode *)malloc(sizeof(ListNode));
ListNode * beginhead = head;
for (int i = 0; i<n; i++)
{
ListNode * node = (ListNode *)malloc(sizeof(ListNode));
node->val = a[i];
head->next = node;
head = node;
}
head->next = NULL;
return beginhead->next;
}
/** * * */
void Print(ListNode * head)
{
while (head != NULL)
{
cout << head->val << " ";
head = head->next;
}
}
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
{
int i = 1;
int m = 0;
ListNode *beginhead;
ListNode * head = (ListNode*)malloc(sizeof(ListNode));
beginhead = head;
while (l1 != NULL && l2 != NULL)
{
int sum = (l1->val + l2->val);
int n = sum%10;
if (m == 1)
n = n + 1;
m = sum / 10;
ListNode * node = (ListNode *)malloc(sizeof(ListNode));
node->next = NULL;
node->val = n;
if (n >= 10)
{ // {3,7} {9,2}
node->val = n % 10;
m = 1;
}
head->next = node;
head = node;
l1 = l1->next;
l2 = l2->next;
}
if (l1!=NULL)
{ //{9,9} {1}
while (l1 != NULL)
{
int l1Val = l1->val;
if (m == 1)
l1Val = l1->val+1;
m = l1Val / 10;
l1->val = l1Val % 10; //
head->next = l1;
head = head->next;
l1 = l1->next;
}
if (m == 1)
{
ListNode * node = (ListNode*)malloc(sizeof(ListNode));
node->next = NULL;
head->next = node;
node->val = 1;
}
return beginhead->next;
}
if (l2 != NULL)
{//{1}{9,9}
while (l2 != NULL)
{
int l2Val = l2->val;
if (m == 1)
l2Val =l2->val+1;
m = l2Val / 10;
l2->val = l2Val % 10; //
head->next = l2;
head = head->next;
l2 = l2->next;
}
if (m == 1)
{
ListNode * node = (ListNode*)malloc(sizeof(ListNode));
node->next = NULL;
head->next = node;
node->val = 1;
}
return beginhead->next;
}
if (m == 1)
{
ListNode * node = (ListNode *)malloc(sizeof(ListNode));
node->next = NULL;
head->next = node;
head = node;
head->val = 1;
}
return beginhead->next;
};
};
int main()
{
/** * {1} {9,9} * {9,9} {1} * {0} {0} * {3,7} {9,2} */
int b[] = {3,7};
int a[] = {9,2};
ListNode *l1 = CreateLinkList(a, sizeof(a) / sizeof(int));
ListNode *l2 = CreateLinkList(b, sizeof(b) / sizeof(int));
Solution *s = new Solution;
Print(s->addTwoNumbers(l1, l2));
system("pause");
return 0;
}
このプログラムは3、4時間くらい書いてあるので、ゆっくりしましょう.まず出会った問題やよく知っていることを話しましょう.ゆっくり書いて完成できますが、よく知りません.1.チェーンテーブルを作成するとき、最後の要素にNULLを割り当てないでください.これはデッドサイクルです.mallocというヘッダファイルはstdlibに含まれています.hこのヘッダファイルの中にあります.2.多くのテスト例が通じないような気がしますが、leetcodeはテスト例を示しています.これはいいと思います.間違っていますが、どこが間違っているか知っています.ゆっくりデバッグすることができます.3.malloc新しいnodeを作るときは、このnode->nextはすべてNULLを与えたほうがいい.