如题,利用尾插法建立单链表,再利用头插法完成对单链表的逆置并输出逆置后的单链表
注意:实现过程中,可以使用头指针和头节点两者中的任一一个作为参数传入函数中,并在函数内部通过循环进行头插法逆转操作,此处我们选择用头指针作为参数。
#include<iostream>
using namespace std;
//定义结点类型
typedef struct node {
int data; //数据域
struct node* next; //指针域
}Node, * LinkList;
//尾插法建立单链表
LinkList TailInsert() {
int n, x;
LinkList L, p, q;
L = new Node;
L->next = NULL; //创建头节点
q = L;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> x;
p = new Node;
p->data = x;
p->next = NULL;
q->next = p;
q = p;
}
return L;
}
//头插法将单链表逆置
LinkList Reverse(LinkList L) {
LinkList p, q, r;
p = L->next; //p为首元结点
q = NULL; //q为尾元结点
while (p != NULL) {
r = p->next; //保存p的下一个结点
p->next = q; //使p->next指向q,完成逆置操作
q = p; //移动尾结点指针q
p = r; //移动头结点指针p
}
L->next = q; //修改头结点指向尾结点
return L;
}
//输出单链表
void Print(LinkList L) {
LinkList p = L->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkList L, ReL;
L = TailInsert(); //尾插法建立单链表
ReL = Reverse(L); //逆置单链表
Print(ReL); //输出单链表
return 0;
}