链表测试框架示例:

 1 // leetcodeList.cpp : 定义控制台应用程序的入口点。vs2013 测试通过
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <Windows.h>
 6 #include <iostream>
 7 
 8 using namespace std;
 9 
10 struct ListNode
11 {
12     int val;
13     ListNode *next;
14     ListNode(int x) : val(x), next(nullptr){};
15 };
16 
17 void showList(ListNode *Head) {
18     ListNode *p = Head;
19     while (p != nullptr) {
20         cout << p->val << '\t';
21         p = p->next;
22     }
23     cout << endl;
24 }
25 
26 ListNode* createList(int n) {
27     ListNode dummy(-1);
28     ListNode *prev = &dummy;
29     for (int i = 0; i < n; ++i) {
30         int value;
31         cout << "input number:";
32         cin >> value;
33         prev->next = new ListNode(value);
34         prev = prev->next;
35     }
36     return dummy.next;
37 }
38 
39 ListNode* addTwoNumbers(ListNode *l1, ListNode *l2) {
40     ListNode *pa = l1;
41     ListNode *pb = l2;
42     ListNode dummy(-1);  // 头节点,目的是只有一个元素的时候不需要特殊考虑
43     ListNode *prev = &dummy;
44     int carry = 0; // 表示进位
45     while (pa != nullptr || pb != nullptr) {
46         const int ai = (pa == nullptr ? 0 : pa->val);
47         const int bi = (pb == nullptr ? 0 : pb->val);
48         const int value = (ai + bi + carry) % 10;
49         carry = (ai + bi + carry) / 10;
50         prev->next = new ListNode(value);
51 
52         pa = pa->next;
53         pb = pb->next;
54         prev = prev->next;
55     }
56     if (carry > 0)
57         prev->next = new ListNode(carry);
58     return dummy.next;
59 }
60 
61 
62 int _tmain(int argc, _TCHAR* argv[])
63 {
64     ListNode *l1 = createList(3);
65     showList(l1);
66     ListNode *l2 = createList(3);
67     showList(l2);
68     ListNode *result = addTwoNumbers(l1, l2);
69     showList(result);
70     system("pause");
71     return 0;
72 }
listTestFrame

相关文章: