程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Add Two Numbers,addtwonumbers

Add Two Numbers,addtwonumbers

編輯:C++入門知識

Add Two Numbers,addtwonumbers


題目意思很簡單,兩個鏈表分別表示兩個數,將兩個數相加的結果存入一個新的鏈表中。

思路同樣很簡單:兩個鏈表如果一樣長,對應位置相加,如果某一個鏈表多了,則根據加的結果有無進位繼續處理,全部結束後要考慮會不會還剩進位。

c++的鏈表,題目已經給了一個挺好的例子:

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

對於創建鏈表可以使用一個頭節點來一直指向這個鏈表,頭節點中沒有數據

ListNode *l1,*l1head;
l1=new ListNode(0);
l1head=l1;

for(int i=0;i<n;i++)
{
    scanf("%d",&temp);
    ListNode *tempnode=new ListNode(temp);
    l1->next=tempnode;
    l1=l1->next;
}

接下來直接進行比較,情況考慮周全即可,比較危險的數據有

[5],[5] ; [1],[99] 

1 class Solution { 2 public: 3 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 4 ListNode *res, *head; 5 res = new ListNode(0); 6 head = res; 7 int flag = 0; 8 while (l1 != NULL && l2 != NULL) { 9 ListNode *tempNode = new ListNode(0); 10 int temp = l1->val + l2->val + flag; 11 if (temp >= 10) { 12 flag = 1; 13 tempNode->val = temp % 10; 14 } else { 15 flag = 0; 16 tempNode->val = temp; 17 } 18 19 l1 = l1->next; 20 l2 = l2->next; 21 res->next = tempNode; 22 res = res->next; 23 } 24 while (l1 != NULL) { 25 ListNode *tempNode = new ListNode(0); 26 27 if (flag == 1) { 28 29 tempNode->val = l1->val + flag; 30 if (tempNode->val >= 10) { 31 flag = 1; 32 tempNode->val = tempNode->val % 10; 33 } else { 34 flag = 0; 35 } 36 l1 = l1->next; 37 res->next = tempNode; 38 res = res->next; 39 } else { 40 res->next = l1; 41 break; 42 } 43 44 } 45 while (l2 != NULL) { 46 ListNode *tempNode = new ListNode(0); 47 48 if (flag == 1) { 49 50 tempNode->val = l2->val + flag; 51 if (tempNode->val >= 10) { 52 flag = 1; 53 tempNode->val = tempNode->val % 10; 54 } else { 55 flag = 0; 56 } 57 l2 = l2->next; 58 res->next = tempNode; 59 res = res->next; 60 } else { 61 res->next = l2; 62 break; 63 } 64 65 } 66 if (flag == 1) { 67 ListNode *tempNode = new ListNode(1); 68 res->next = tempNode; 69 } 70 return head->next; 71 } 72 }; Add Two Numbers

PS :

調用和返回都使用了p->next的方式,因為沒有把頭指針傳進去。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved