Add Two Numbers
有兩個數字
每個數字用倒過來的linked list表示,
比方說 23二十三就是 先3 -> 2
然後要把這兩個數字相加,
加完再存成一個倒過來的linked list
要注意的是10的進位部份
和兩個list長度不同的時候~~~
舉例來說,
12+ 23 = 35,
輸入是 2->1 跟 3-> 2
輸出是 5->3
輸入是5,5的話, 輸出是 0->1
(我真的需要寫這麼細嗎XD~)
小廢廢我的版本:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* createNode(int val)
{
struct ListNode *node = malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
return node;
}
void appendQList(struct ListNode **head, struct ListNode *node)
{
if (*head == NULL)
{
(*head) = node;
return;
}
struct ListNode *tmp = (*head);
for (tmp = *head;tmp->next!=NULL;tmp=tmp->next)
;
tmp->next = node;
return;
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *result=NULL,*p1,*p2;
bool tenflag = 0;
for(p1=l1,p2=l2;(p1 != NULL || p2 != NULL);)
{
int v1 = (p1== NULL)? 0:p1->val;
int v2 = (p2== NULL)? 0:p2->val;
int sum = v1+v2 + tenflag;
tenflag = (sum < 10) ? 0:1;
sum = (tenflag)? sum - 10: sum;
appendQList(&result,createNode(sum));
if(p1!=NULL)
p1=(p1->next ==NULL)? NULL:(p1->next);
if(p2!=NULL)
p2=(p2->next ==NULL)? NULL:(p2->next);
}
if (tenflag)
{
appendQList(&result,createNode(tenflag));
tenflag = 0;
}
return result;
}
寫完看了一下別人的, 覺得進位的地方似乎有更好的寫法
但是懶得想了 XD 先這樣吧QQ 我要前進下一題屋屋.
一開始在appendList的地方卡好久
完全就是call by address和call by value沒學好QQ
順便附上兩年前複習的時候的內心吶喊吧哈哈哈哈哈
====================================================
1.剛剛才發現,原來call by address和call by reference 是不一樣的。
2.我一直以為只有call by value和 call by reference兩種 囧
3.我根本不知道C沒有call by reference,C++才有。 (!)
4.拿出C語言課本想證明我的記憶沒有錯,發現相關章節的標題旁邊,我本人的字跡寫著:「C沒有call by reference」(WTF XD)
5.有一種根本沒寫過C++的fu,我吃屎好了我面試個屁 T—T(大哭奔入雨中)
沒有留言:
張貼留言