【ブラシノート】LeetCode_02:両数加算_中等(C)
11379 ワード
テーマ:2つの数を足す
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.数値0以外の2つの数は0で始まると仮定できます.例:入力:(2->4->3)+(5->6->4)出力:7->0->8理由:342+465=807
初めてLeetCodeを使って、メモを書いてからハハハハを見ます.この問題は基本的な考え方が簡単だと感じて、新しいノードを作ってチェーンテーブルを構築しますが、細部には穴がたくさんあります(もちろん主な原因は私が本当に料理が多すぎるからです).
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *tail;
struct ListNode *head;
struct ListNode *temp;
struct ListNode *p1;
struct ListNode *p2;
int sum = 0;
int go = 0;//
head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL;
tail = head;//
p1 = l1;
p2 = l2;
while(p1 && p2)
{
sum = p1->val + p2->val + go;
if(sum >=10)
{
sum = sum % 10;
go = 1;
}
else go = 0;
//
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = sum;
p1 = p1->next;
p2 = p2->next;
}
if(p1 == NULL) //l2
{
p1 = p2;
}
else
{
p1 = p1;
}
while(p1)
{
sum = p1->val + go;
if(sum >= 10)
{
sum = sum % 10;
go = 1;
}
else go = 0;
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = sum;
p1 = p1->next;
}
if(go == 1)
{
tail->next = (struct ListNode*)malloc(sizeof(struct ListNode));
tail = tail->next;
tail->val = 1;
}
tail->next = NULL;//tail next !!
temp = head;
head = head->next;
free(temp);
return head;
}