创建链表
一般创建链表我们先使用typedef struct,这样定义结构体变量时,我们就可以直接可以用link *head;,定义结构体类型变量了。
//声明节点结构
typedef struct Link{
int elem;
struct Link *next; //指向后继元素的指针
}link;
链表creat函数
link *creat()
{
link *head = new link; //创建一个头节点
link *t= head; /*声明一个指针指向头节点,用于遍历链表*/
//生成链表
for(int i=1;i<=n;i++)
{//创建节点并初始化
link *a=new link ;
cin>>a->elem;
a->next=NULL;
//建立新节点与直接前驱节点的逻辑关系
t->next=a;
t=t->next;
}
return head;
}
链表print函数
void print(link *head)
{
link *t=head; //将t指针指向头结点
//只要t指针指向的结点的next不是NULL,就执行输出语句
while (t->next)
{
t=t->next;
cout<<t->elem<<" ";
}
cout<<endl;
}
链表del函数
//n是要删除元素所在位置的值
link *del(link * head,int n)
{
link *t=head;
for(int i=1;i<n;i++)
{
t=t->next;
}
link *delnum=t->next; //单独设置一个指针指向被删除结点,以防丢失
t->next=t->next->next;//删除某个结点的方法就是更改前一个结点的指针域
delete delnum; //手动释放该结点,防止内存泄漏
return head;
}
链表insert函数
//elem表示新数据元素,n表示新元素要插入的位置
link *insert(link*head,int elem,int n)
{
link *t=head; //创建临时结点t
//首先要找到要插入位置的上一个结点
for(int i=1;i<n;i++)
{
if(t==NULL)
{
cout<<"error";
return head;
}
t=t->next;
}
//创建插入结点c
link *c=new link;
c->elem=elem;
//向链表中插入结点
c->next=t->next; //这里有一定的顺序,详解看下面两张图
t->next=c;
return head;
}
蒟蒻的代码
#include<iostream>
using namespace std;
typedef struct Link
{
int elem ;
struct Link *next;
}link;
int n;
link *creat(); //创建一个链表
link *insert(link*head,int elem,int n); //插入元素
link * del (link*head, int n); //删除元素
void print(link*head); //输出结点的值
int main()
{
cin>>n;
link* p=creat();
cout<<"创建的链表是\n";
print(p);
p=del(p,3);
cout<<"删除一个元素后的链表是\n";
print(p);
p=insert(p,5,4);
cout<<"增加一个元素后的链表是\n";
print(p);
}
link *creat()
{
link *head = new link;
link *t= head;
for(int i=1;i<=n;i++)
{
link *a=new link ;
cin>>a->elem;
a->next=NULL;
t->next=a;
t=t->next;
}
return head;
}
void print(link *head)
{
link *t=head;
while (t->next)
{
t=t->next;
cout<<t->elem<<" ";
}
cout<<endl;
}
link *del(link*head,int n)
{
link *t=head;
for(int i=1;i<n;i++)
{
t=t->next;
}
link *delnum=t->next;
t->next=t->next->next;
delete delnum;
return head;
}
link *insert(link*head,int elem,int n)
{
link *t=head;
for(int i=1;i<n;i++)
{
if(t==NULL)
{
cout<<"error";
return head;
}
t=t->next;
}
link *c=new link;
c->elem=elem;
c->next=t->next;
t->next=c;
return head;
}