一个关于C++链表的问题
已经编好了,只是有一点小错误,麻烦高手找出来说明并修改改后要能运行的。
如果正确追加悬赏!
答案://动态链表,链表的生成,长度,插入,删除,打印。
#include<iostream>
#include<string>
using namespace std;
#define NULL 0
//指向为空时设为0
int n=0;
//链表的长度n
struct link
{
int num;
//学号
string name;
//姓名
link *next;
};
link *creat()
//链表的产生,返回链表头
{
link *head, *p1, *p;
p1=p=new link;
cout<<"请输入链表(以0为结束):"<<endl;
cin>>p1->num>>p1->name;
head=NULL;
while(p1->num!=0)
//p1开辟新节点,以0为输入结束
{
n++;
//链表增加一个节点
if(n==1) head==p1;
else p->next=p1;
//p1所指的节点连接在p的后面
p=p1;
//p指向链表的最后一个节点
p1=new link;
cin>>p1->num>>p1->name;
}
p->next=NULL;
//末尾为空
return(head);
}
void print(link *head)
//打印每个节点的内容
{
link *p;
p=head;
if(head!=NULL)
do {cout<<p->name<<","<<p->name<<"-->";
p=p->next;
//指针向后移一位
}while(p!=NULL);
cout<<endl;
}
void dele(link *head)
//删除第k个节点的内容
{
int key=1,k;
link *p1,*p2;
cout<<endl<<"输入要删除的节点的位置k:";
cin>>k;
if(head=NULL){ cout<<"这是空表!"<<endl; }
p1=head;
while(key!=k&&p1->next!=NULL)
{ p2=p1;p1=p1->next; key++; }
//没有到达k位置就向后移一位
if(key==k)
{
if(p1==head) head=p1->next;
else { p2->next=p1->next; n--; }
//后一节点赋值给前一节点,删除p1当前指向
}
else cout<<"找不到这个节点!"<<endl;
cout<<"删除 "<<k<<" 节点后的链表为"<<endl;
print(head);
}
void insert(link *head)
//插入节点in到第k个节点
{
int k;
link *in;
cout<<endl<<"输入要删除的节点的位置k:";
cin>>k;
cout<<endl<<"要插入的节点:";
in=new link;
//开辟一个新节点
cin>>in->num>>in->name;
int key=1;
link *p1,*p2,*p0;
p1=head;
p0=in;
if(k>n) { cout<<"插入点过长!"<<endl; }
//大于链表的长度
else
{
while(key<k && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
key++;
}
if(head==p1)head=p0;
else p2->=p0;
p0->next=p1;
n++;
}
cout<<"在 "<<k<<" 处插入节点后的链表为"<<endl;
print(head);
}
int main()
{
link *head;
//*in为要插入的节点
head=creat();
//链表的生成
print(head);
//链表的打印
dele(head);
//节点的删除
insert(head);
//节点的插入
return 0;
}..
上一个:怎样用C++语言编辑
下一个:C++问题。。高手进来。。。