*链表应用要求:1建立 2删除 3输出 4反序 5主函数
*/
#include<iostream>
#include<iomanip>
using namespace std
typedef struct Lnode{
int data
struct Lnode *next
}Lnode,*LinkList
//初始化链表
bool initList(LinkList &L)
{
L=new Lnode
if(L==NULL){
cerr<<"内存分配错误!"<<endl
return false
}
L->next=NULL
return true
}
//创建链表
bool createList(LinkList &L)
{
int n,data
LinkList p=L,r
cout<<"输入链表元素的个数:"
cin>>n
cout<<"输入链表中的元素:"
for(int i=0i<n++i){
cin>>data
r=new Lnode
if(r==NULL){
cerr<<"内存分配错误!"<<endl
return false
}
r->data=data
r->next=p->next
p->next=r
p=r
}
p->next=NULL
return true
}
//删除链表中的元素
bool deleteList(LinkList L)
{
int pos
LinkList p=L
if(p->next==NULL){
cout<<"链表是空的!"<<endl
return false
}
cout<<"输入你要删除的位置:"
cin>>pos
for(int i=0i<pos-1++i){
p=p->next
}
LinkList q=p->next
cout<<"你删除的第"<<pos<<"个位置的元素是:"<<q->data<<endl
p->next=q->next
delete q
return true
}
//逆序输出链表中的元素
bool invertList(LinkList &L)
{
LinkList p=L->next
if(p==NULL) return false
else invertList(p)//采用递归的方式逆序输出链表
cout<<p->data<<setw(5)
return true
}
//输出链表中的元素
bool dispList(LinkList L)
{
LinkList p=L->next
if(p==NULL){
cout<<"链表是空的!"<<endl
return false
}
cout<<"链表中的元素为:"
while(p){
cout<<p->data<<setw(5)
p=p->next
}
cout<<endl
return true
}
void main()
{
LinkList L
initList(L)
createList(L)
dispList(L)
deleteList(L)
dispList(L)
cout<<"逆序输出的元素为:"
invertList(L)
cout<<endl
}
题目中的将链表逆序,如果用单链表实现有点麻烦,我再想想有没有好的办法。
上面的程序中我只是将链表的元素逆序输出,至于将链表逆序,我想好了会回复你的。
将一条链表按逆序输出假若头结点为L,则有
p=q=L/*p,q为指向头结点的两个指针*/
while(p->next!=NULL)
p=p->next/*让p指向键表的最后一个要访问结点*/
while(1)
{
while(q->next!=p)
q=q->next/*让q向后找,找到最后一个要打印的结点*/
printf("%d\n",p->data)
p=q/*p向前移动一个*/
q=L/*q又指向头结点*/
if(p=L)/*访问完了退出*/
break
}
你参考吧