【LeetCode刷題記錄】2. 兩數相加

題目描述:
在這裏插入圖片描述
單鏈表定義:

struct ListNode {
 int val;
 ListNode *next;
 ListNode(int x) : val(x), next(NULL) {}
};

打印鏈表:
正序:

void printListNode(ListNode* ln) {
 ListNode* ln_temp = ln;
 while (ln_temp != NULL) {
  std::cout << ln_temp->val << " ";
  ln_temp = ln_temp->next;
 }
 std::cout << std::endl;
}

反序:

void printListNodeInverse(ListNode* ln) {
 ListNode* ln_temp = ln;
 stack<int> stk;
 while (ln_temp != NULL) {
  stk.push(ln_temp->val);
  ln_temp = ln_temp->next;
 }
 while (!stk.empty()) {
  std::cout << stk.top() << " ";
  stk.pop();
 }
 std::cout << std::endl;
}

題解:

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
 ListNode* ph = new ListNode(0);
 ListNode* ln_sum = ph;
 int carry = 0;
 while (l1 != NULL || l2 != NULL) {
  int x = l1 != NULL ? l1->val : 0;
  int y = l2 != NULL ? l2->val : 0;
  int sum = x + y + carry;
  carry = sum >= 10 ? 1 : 0;
  ln_sum->next = new ListNode(sum % 10);
  ln_sum = ln_sum->next;
  if (l1 != NULL)l1 = l1->next;
  if (l2 != NULL)l2 = l2->next;
 }
 if (carry)
  ln_sum->next = new ListNode(1);
 return ph->next;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章