实现方案有 借助一个栈实现
这个比较简单
放到 github了
这里
另一种方法,不太好理解
0- > 1 - > 2- > 3- > 4- > nullptr
变成
4 -> 3 -> 2 -> 1 -> 0->nullptr
步骤应该是
nullptr
0 -> nullptr
1 -> 0 -> nullptr
2 -> 1 -> 0 -> nullptr
......
4 -> 3 -> 2 -> 1 -> 0->nullptr
一个head 指向这个头指针,我们还需要一个新链表的指针,和存放head 指针的副本指针
我们定义的结构体是这样的
struct Node
{
int value;
Node* next;
Node() :value(0), next(nullptr) {};
};
打印链表的内容
void printNodeList(Node* head)
{
Node* t = new Node;
t = head;
while (t != nullptr)
{
std::cout << t->value << "->";
t = t->next;
}
std::cout << "nullptr"<<std::endl;
delete t;
}
链表反转(这里面写的打印 主要是让大家好理解)
Node*reversal(Node* head)
{
Node* cur = head;
Node* cur_copy = nullptr;
Node* p = nullptr;
if (cur == nullptr)
return nullptr;
while (cur->next != nullptr)
{
cur_copy = cur->next;
std::cout << "cur_copy:";
printNodeList(cur_copy);
cur->next = p;
std::cout << "cur:";
printNodeList(cur);
p = cur;
std::cout << "p:";
printNodeList(p);
cur = cur_copy;
std::cout << "cur:";
printNodeList(cur);
std::cout << "\n";
std::cout << "\n";
std::cout << "\n";
}
cur->next = p;
printNodeList(cur);
return cur;
}
完整的code
// testNodeList.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include <iostream>
struct Node
{
int value;
Node* next;
Node() :value(0), next(nullptr) {};
};
Node* createNodeList(int num)
{
Node* head = new Node;
Node* cur = new Node;
head->value = 0;
head->next = cur;
cur->value = 1;
for (auto i = 2; i < num; i++)
{
Node* t = new Node();
t->value = i;
cur->next = t;
cur = t;
}
cur->next = nullptr;
return head;
}
void printNodeList(Node* head)
{
Node* t = new Node;
t = head;
while (t != nullptr)
{
std::cout << t->value << "->";
t = t->next;
}
std::cout << "nullptr"<<std::endl;
delete t;
}
void reversal(Node* head)
{
Node* cur = head;
Node* cur_copy = nullptr;
Node* p = nullptr;
if (cur == nullptr)
return;
while (cur->next != nullptr)
{
cur_copy = cur->next;
cur->next = p;
p = cur;
cur = cur_copy;
}
cur->next = p;
printNodeList(cur);
}
int main()
{
Node* head = new Node();
head = createNodeList(5);
printNodeList(head);
reversal(head);
system("pause");
return 1;
}