题目
定义一个函数,输入一个链表的头就额点,反转该链表并输出反转后链表的头节点。链表节点定义如下:
typedef int TElemType;//链表节点值的数据类型 struct ListNode { TElemType Data; ListNode* Next; };
分析
反转链表需要用到三个指针。later
指针和node
指针用于转方向,front指针用于记录下一个节点位置。
反转核心四步如下图
C++
#include <iostream> using namespace std; typedef int TElemType;//链表节点值的数据类型 struct ListNode { TElemType Data; ListNode* Next; }; void CreateList(ListNode** head)//构造链表 { ListNode* p = nullptr; ListNode* q = nullptr; int val = 1; *head = new ListNode(); (*head)->Data = val++; q = *head; while (val < 7) { p = new ListNode(); p->Next = nullptr; p->Data = val++; q->Next = p; q = p; } } void PrintList(ListNode* head) //输出 { while (head != nullptr) { cout << head->Data; if (head->Next != nullptr) { cout << "->"; } else { cout << endl; } head = head->Next; } } ListNode* ReversList(ListNode* pHead) { //传入空指针或者只有一个节点,就返回本身 if (nullptr == pHead || nullptr == pHead->Next) { return pHead; } ListNode* later = nullptr;//后指针 ListNode* node = pHead;//当前节点指针 ListNode* front = pHead;//前指针 while (node != nullptr) { front = front->Next; node->Next = later; later = node; node = front; } return later; } int main() { ListNode* head = nullptr; CreateList(&head); cout << "链表反转前:"; PrintList(head); ListNode* Newhead = ReversList(head); cout << "链表反转后:"; PrintList(Newhead); return 0; }
本章完!