2.5链表 链式A+B

把测试代码也写上。

  1 #include <iostream>
  2 #include <vector>
  3 #include <string>
  4 #include <queue>
  5 #include <algorithm>
  6 using namespace std;
  7 
  8 struct ListNode 
  9 {
 10     int val;
 11     struct ListNode *next;
 12     ListNode(int x):val(x), next(NULL) {}
 13 };
 14 
 15 ListNode* create(vector<int> v)
 16 {
 17     ListNode *p = new ListNode(0);
 18     ListNode *temp1 = p;
 19     for (int i = 0;i < v.size();i++)
 20     {
 21         ListNode *temp2 = new ListNode(v[i]);
 22         temp1->next = temp2;
 23         temp1 = temp1->next;
 24     }
 25     return p->next;
 26 }
 27 
 28 void printList(ListNode* result)
 29 {
 30     queue<int> que;
 31     ListNode* temp = result;
 32     while (temp)
 33     {
 34         que.push(temp->val);
 35         temp = temp->next;
 36     }
 37     while (!que.empty())
 38     {
 39         cout << que.front();
 40         que.pop();
 41     }
 42 }
 43 
 44 class Plus {
 45 public:
 46     int cal(int a, int b, int &flag)
 47     {
 48         int sum = a + b + flag;
 49         if (sum > 9)
 50         {
 51             flag = 1;
 52             return sum % 10;
 53         }
 54         else
 55         {
 56             flag = 0;
 57             return sum;
 58         }
 59     }
 60 
 61     ListNode* plusAB(ListNode* a, ListNode* b)
 62     {
 63         queue<int> qua, qub;
 64         while (a)
 65         {
 66             qua.push(a->val);
 67             a = a->next;
 68         }
 69         while (b)
 70         {
 71             qub.push(b->val);
 72             b = b->next;
 73         }
 74         while (qua.size() < qub.size())
 75         {
 76             qua.push(0);
 77         }
 78         while (qua.size() > qub.size())
 79         {
 80             qub.push(0);
 81         }
 82 
 83         ListNode* pHead = new ListNode(0);
 84         ListNode* pM = pHead;
 85 
 86         int flag = 0;
 87         while (!qua.empty())
 88         {
 89             int ans = cal(qua.front(), qub.front(), flag);
 90             ListNode* temp = new ListNode(ans);
 91             pM->next = temp;
 92             pM = pM->next;
 93             qua.pop();
 94             qub.pop();
 95         }
 96         if (flag)
 97         {
 98             ListNode* temp = new ListNode(1);
 99             pM->next = temp;
100             pM = pM->next;
101         }
102         return pHead->next;
103     }
104 };
105 
106 int main()
107 {
108     vector<int> v1{ 4,6,8 };
109     vector<int> v2{ 5,7,6 };
110     ListNode* p1 = create(v1);
111     ListNode* p2 = create(v2);
112     ListNode* ret;
113     Plus solution;
114     ret=solution.plusAB(p1, p2);
115     printList(ret);
116     return 0;
117 }
posted @ 2016-07-27 13:41  Pearl_zju  阅读(220)  评论(0编辑  收藏  举报