0. 非递归思路分析
1. 代码实现
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
// 反转一个不带头结点的链表
LNode* ReverseList(LNode* head) {
LNode* prev = NULL;
LNode* cur = head;
while (cur != NULL) {
LNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
// 初始化一个链表(不带头结点)
void InitList(LinkList &L) {
L = new LNode;
LNode* p = L;
p->data = 0;
for (int i = 1; i < 10; ++i){
LNode* temp = new LNode;
temp->data = i;
p->next = temp;
p = p->next;
}
p->next = NULL;
}
// 打印单链表
void PrintList(LinkList &L) {
LNode* p = L;
while(p) {
cout << p->data << " ";
p = p->next;
}
}
int main() {
LinkList L;
InitList(L);
PrintList(L);
cout << endl;
L = ReverseList(L);
PrintList(L);
return 0;
}
2. 运行截图
3. 递归思路分析
4. 代码实现
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
}LNode, *LinkList;
// 反转一个不带头结点的链表
LNode* ReverseList(LNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
LNode* newHead = ReverseList(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}
// 初始化一个链表(不带头结点)
void InitList(LinkList &L) {
L = new LNode;
LNode* p = L;
p->data = 0;
for (int i = 1; i < 10; ++i){
LNode* temp = new LNode;
temp->data = i;
p->next = temp;
p = p->next;
}
p->next = NULL;
}
// 打印单链表
void PrintList(LinkList &L) {
LNode* p = L;
while(p) {
cout << p->data << " ";
p = p->next;
}
}
int main() {
LinkList L;
InitList(L);
PrintList(L);
cout << endl;
L = ReverseList(L);
PrintList(L);
return 0;
}
5. 运行截图
6. LeetCode原地址
https://leetcode.cn/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/