/*
链表的四种基本的操作
其他的算法都可以根据这些来实现的
*/
# include <bits/stdc++.h>
using namespace std;
typedef struct NODE {
struct NODE *pnext;
int data;
}NODE,*PNODE;
PNODE create_list (void); //创建一个链表
void insert_list (PNODE phead,int pos,int val); //插入一个节点
void trave_list (PNODE phead); //遍历整个链表
void delete_list(PNODE phead,int pos);// 删除一个节点
int main ( )
{
PNODE phead;
phead = create_list();
trave_list (phead);
insert_list(phead,4,5);
delete_list(phead,4);
trave_list (phead);
return 0;
}
PNODE create_list (void)
{
PNODE phead = (PNODE)malloc (sizeof(NODE));
int n;
cin>>n;
PNODE ptail=phead;
for (int i=1;i<=n;++i)
{
PNODE pnew=(PNODE)malloc(sizeof(NODE));
int val;
cin>>val;
pnew->data=val;
pnew->pnext=NULL;
ptail->pnext=pnew;
ptail=pnew;
}
return phead;
}
void trave_list (PNODE phead)
{
PNODE p=phead->pnext;
while (NULL!=p)
{
printf ("%d ",p->data);
p=p->pnext;
}
printf ("\n");
}
void insert_list (PNODE phead,int pos,int val)
{
PNODE p= phead->pnext;
for (int i=1;i<pos;++i)
p=p->pnext;
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
pnew->pnext=p->pnext;
p->pnext=pnew;
}
void delete_list(PNODE phead,int pos)
{
PNODE p= phead->pnext;
for (int i=1;i<pos-1;i++)
p=p->pnext;
PNODE t=p->pnext;
p->pnext=p->pnext->pnext;
free(t);
}