单链表的插入删除

来源:互联网 发布:淘宝.香云纱 编辑:程序博客网 时间:2024/06/04 18:48
#include<iostream>
using namespace std;
struct Lnode
{
 int data;
 Lnode *next;
};
void Creat_Link(Lnode *&head)            //*&head指针的引用,Lnode* head;传递的是指针,但是对于指针的原值却发生了COPY,这样你虽然可以对指针指向的内存进行修改但是不能对指针进行修改。因此要传递指针的引用。
{
 Lnode *p,*q;
 int n,i;
 p=new Lnode;
 head=p;
 cout<<"输入链的长度"<<endl;
 cin>>n;
 cout<<"输入数据"<<endl;
 cin>>p->data;
 q=p;
 for(i=1;i<=n-1;i++)
 {
  p=new Lnode;
  cin>>p->data;
  q->next=p;
  q=p;
 }
 q->next=NULL;
}
void insert_Link(Lnode *&head)
{
 int i,j;
 cout<<"输入插入位置:";
 cin>>i;
 Lnode *q,*iq;
 q=head;
 for(j=1;j<i;j++)
 {
  iq=q;
  q=q->next;
 }
 Lnode *p;
 p=new Lnode;
 cout<<"输入插入数据"<<endl;
 cin>>p->data;
 p->next=iq->next;
 iq->next=p;
 cout<<endl;
}
void delete_Link(Lnode *&head)
{
 int i,j;
 cout<<"输入删除位置"<<endl;
 cin>>i;
 Lnode *q,*iq;
 q=head;
 for(j=1;j<i;j++)
 {
  iq=q;
  q=q->next;
 }
 Lnode *p;
 p=iq->next;
 iq->next=p->next;
 delete(p);
 cout<<endl;
}
void output_Link(Lnode *&head)
{
 if(head==NULL)
 {
  cout<<"空链表"<<endl;
  return ;
 }
 Lnode *q;
 q=head;
 while(q!=NULL)
 {
  cout<<q->data<<" ";
  q=q->next;
 }
 cout<<endl;
}
int main()
{
 Lnode *head;
 head=NULL;
 Creat_Link(head);
 insert_Link(head);
 output_Link(head);
 delete_Link(head);
 output_Link(head);
 return 0;
}