链表测试框架示例:
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 }