#include <iostream>
#define ok 1
using namespace std;
typedef int ElemType;
typedef int status;
//定义单链表
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
//求表长
int Length(LinkList L)
{
LNode *p = L->next;
int len = 0;
while(p)
{
p = p->next;
len++;
}
return len;
}
//尾插法创建单链表
LinkList CreatList_R(LinkList &L, int n)
{
L = new LNode; //为新结点开辟空间
L->next = NULL; //初始化,结点的Next域置空
LNode *r = L; //尾指针指向头结点
for (int i = 0; i < n; i++)
{
LNode *p = new LNode; //生成新结点
cin >> p->data;
p->next = NULL; //新结点next域置空
r->next = p; //尾结点的next指向新结点p(此时P为新的尾结点)
r = p; //然后将p赋给尾结点r
}
return L;
}
//输出
int DispList(LinkList L)
{
LNode *p = L->next; //令结点P指向链表的首元结点
while (p != NULL) //如果p不为空,说明链表中有元素
{
cout << p->data << ' '; //输出表中元素
p = p->next; // P指向下一个结点,直到p为空
}
return 0;
}
//逆序输出(相当于头插法)
status func(LinkList L)
{
LNode *p = L->next, *q;
L->next = NULL;
while (p)
{
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
return ok;
}
int main(void)
{
int n;
LinkList L;
cout << "请输入元素的个数:" << endl;
cin >> n;
cout << "请依次输入需要存入的数据:" << endl;
CreatList_R(L,n);
cout << "输出原线性表:";
DispList(L);
cout << endl;
func(L);
cout << "输出改变后的线性表:" ;
DispList(L);
}