就地反转,就是空间复杂度O(1)
#include <iostream>
using namespace std;
typedef struct List node;
struct List
{
int data;
struct List* next;
};
//insert at tail
void insert(node* &L, int num) {
node* p = new node;
p->data = num;
p->next = NULL;
L->next = p;
L = p;
}
int main()
{
node* L = new node;
L->next = NULL;
L->data = 0;
node* tail = L;//记录尾结点
for (int i = 1; i < 10; i++) {
insert(tail, i);
}
//反转链表核心代码--------------------------------------------
node* p = L->next;
L->next = NULL; //先让原链表第一个结点断开,之前必须保存其下一个结点
while (p) {
node* q = p->next;
p->next = L;
L = p;
p = q;
}
//反转链表核心代码--------------------------------------------
//以下为打印反转后的链表
node* r = L;
while (r) {
cout << r->data << " ";
r = r->next;
}
return 0;
}
就地反转链表
最新推荐文章于 2022-07-30 18:06:49 发布