【试题描述】定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
【试题来源】未知
【参考代码】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include <iostream> using namespace std;
struct ListNode { int value; ListNode* next; };
ListNode* createList(int* data, int n) {
ListNode* headNode = NULL; ListNode* lastNode = NULL;
for(int i = 0; i < n; i++) { ListNode* node = new ListNode(); node->value = data[i]; node->next = NULL; if(i == 0) { headNode = node; } else { lastNode->next = node; } lastNode = node; }
return headNode; }
void printList(ListNode* headNode) {
if(headNode == NULL) { return ; } ListNode* node = headNode; while(node != NULL) { cout << node->value << " "; node = node->next; } }
ListNode* reverseList(ListNode* headNode) {
if(headNode == NULL) { return NULL; }
ListNode* curNode = headNode; ListNode* preNode = NULL; ListNode* nextNode = NULL;
while(curNode != NULL) {
nextNode = curNode->next; curNode->next = preNode; preNode = curNode; curNode = nextNode;
} return preNode; }
int main() { int data[] = {1, 2, 3, 4, 5, 6, 7}; int n = 7; ListNode* headNode = createList(data, n); ListNode* reverseNode = reverseList(headNode); printList(reverseNode); return 0; }
|