leetcode 2---両数加算(C言語版)
10845 ワード
タイトル
構想設計
いくつかのチェーンテーブルの問題をした後、チェーンテーブルのヘッドポインタ、チェーンテーブルの表示、新しいノードの選択、浅い複製と深い複製に対する認識が不十分であることを発見し、問題をする時にはっきりしないことを発見し、Cの基礎をもう一度しなければならない.次の2つの方法は本題の問題解区の大物を参考にして、みんなは直接leetCodeに行って見ることができます.
メソッドの反復
2つのチェーンテーブルが空になるまでwhileループを使用して反復します.
メソッド2再帰
C変数はグローバル変数であり、int c=0の場合.関数に入れると、再帰cのたびにゼロになり、万が一2つの数が加算されて進位があればバグが発生します.
。 , , 。
, , 。
0 , 0 。
:
:(2 -> 4 -> 3) + (5 -> 6 -> 4)
:7 -> 0 -> 8
:342 + 465 = 807
構想設計
いくつかのチェーンテーブルの問題をした後、チェーンテーブルのヘッドポインタ、チェーンテーブルの表示、新しいノードの選択、浅い複製と深い複製に対する認識が不十分であることを発見し、問題をする時にはっきりしないことを発見し、Cの基礎をもう一度しなければならない.次の2つの方法は本題の問題解区の大物を参考にして、みんなは直接leetCodeに行って見ることができます.
メソッドの反復
2つのチェーンテーブルが空になるまでwhileループを使用して反復します.
struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
int c = 0; //
struct ListNode *head, *cur, *next;
head = (struct ListNode *)malloc(sizeof(struct ListNode));
head->next = NULL;
cur = head;
while (l1 || l2 || c) // 。 c
{
next = (struct ListNode *)malloc(sizeof(struct ListNode));
next->next = NULL;
cur->next = next;
cur = next;
l1 != NULL ? (c += l1->val, l1 = l1->next) : (c += 0); // ,
l2 != NULL ? (c += l2->val, l2 = l2->next) : (c += 0);
cur->val = c % 10; //
c = c / 10; //
}
struct listNode *del = head;
head = head ->next; // , , ?
free(del);
return head;
}
メソッド2再帰
C変数はグローバル変数であり、int c=0の場合.関数に入れると、再帰cのたびにゼロになり、万が一2つの数が加算されて進位があればバグが発生します.
int c = 0;
struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
if (!l1 && !l2 && 0 == c) // , C ,
{ // C
return NULL; //( , 2 + 8 = 10, , 0 )
}
l1 != NULL ? (c += l1->val, l1 = l1->next) : (c += 0);
l2 != NULL ? (c += l2->val, l2 = l2->next) : (c += 0);
struct ListNode *cur = (struct ListNode *)malloc(sizeof(struct ListNode));
cur->val = c % 10;
c = c / 10;
cur->next = addTwoNumbers(l1, l2); //
return cur;
}