第二章 线性表—链表的逆序
数据结构基础代码 (严蔚敏 人邮教育出版社)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
//写一个函数,把链表逆序
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void Init(LinkList &L)
{
L=new LNode;
L->next=NULL;
}
void LinkInsert1(LinkList &L,int n)
{
LNode *p;
cout <<"请输入使用头插法建立链表的元素值:"<<endl;
for(int i=0;i<n;i++)
{
p=new LNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
void LinkInsert2(LinkList&L,int n)
{
int i;
LNode *p,*q;
q=L;
cout<<"请输入需要使用尾插法建立链表的元素值"<<endl;
for(i=0;i<n;i++)
{
p=new LNode;
cin>>p->data;
q->next=p;
q=p;
}
}
void Print(LinkList &L)
{
LNode *p;
p=L->next;
cout<<"您所建立的链表如下:"<<endl;
while(p)
{
cout <<p->data<<" ";
p=p->next;
}
cout <<endl;
}
void Reverse(LinkList &L)
{
LNode *p,*q;
p=L->next;
L->next=NULL; //把头结点从链表中卸下来。
while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
int main()
{
int n;
LinkList L;
Init(L);
cout<<"请输入您所创建的链表元素个数:";
cin >> n;
LinkInsert1(L,n);
Print(L);
LinkInsert2(L,n);
Print(L);
Reverse(L);
Print(L);
}