學習了鏈表結構,鏈表中元素的訪問,對象指針的初始化與賦值,鏈表的建立(多個節點連接起來),進位計算的表達。學習
100msspa
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* sum = new ListNode(0); ListNode* tmp = sum; int carry = 0; while(l1 || l2) { if(l1) { carry += l1->val; l1 = l1->next; } if(l2) { carry += l2->val; l2 = l2->next; } tmp->next = new ListNode(carry % 10); carry /= 10; tmp = tmp->next; } if(carry) tmp->next = new ListNode(carry); return sum->next; } };
68ms指針
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *L = new ListNode(0), *p = L; int m = 0; //進位值 int x, y; //保存l1 l2節點的值 while(l1 || l2){ //題目中的鏈表是沒有header的 x = (l1 != NULL) ? l1->val : 0; y = (l2 != NULL) ? l2->val : 0; p->val = (x + y + m) % 10; m = (x + y + m) > 9; cout << x << y << m << endl; l1 = (l1 != NULL) ? l1->next : NULL; l2 = (l2 != NULL) ? l2->next : NULL; p->next = ((l1 || l2) || m != 0) ? new ListNode(m) : NULL; // 若是僅判斷(l1 || l2)的話,5+5 的狀況會丟失進位 p ? p = p->next : 0; } return L; } };