#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode,*LinkList;
//初始化链表(含有头结点)
LinkList init_linklist() {
LinkList p = new LNode;//头结点
p->next = NULL;
LinkList L = p;//头指针
return L;
}
//采用头插法建立链表
LinkList head_insert(LinkList L, int n) {
for (int i = 1; i <= n; i++) {
LinkList s = new LNode;
cout << "请输入第" << i << "个结点的值:";
cin >> s->data;
s->next = NULL;
s->next = L->next;
L->next = s;
}
return L;
}
//链表的逆置
LinkList reverse_linklist(LinkList L) {
LinkList p = L, r = L;
//p指向最后一个结点
while (r->next) {
r = r->next;
}
//两个步骤
//1.将头结点后面的第一个结点插入到最后
//2.将这个结点删掉
//循环条件是尾结点成为第一个结点
while (p->next != r) {
LinkList temp = p->next;
p->next = temp->next;
temp->next = r->next;
r->next = temp;
}
return L;
}
void print(LinkList L) {
LinkList p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
LinkList L = init_linklist();
L = head_insert(L, 5);
print(L);
L = reverse_linklist(L);
print(L);
return 0;
}
单链表的逆置
最新推荐文章于 2023-11-29 11:12:16 发布