#include<stdio.h>
#include<malloc.h>
typedef struct NODE{
struct NODE*link;
int data;
}Node,*Nodep;
Nodep CreateListH(int n) //创建有包含头结点的链表
{
int i;
Node *L=NULL;
Node *p=NULL;
Node *r=NULL;
L=(Node*)malloc(sizeof(Node)); //头结点
L->link=NULL;
r=L;
for(i=0;i<n;i++)
{
p=(Node*)malloc(sizeof(Node));
// p->data=i;
printf("输入结点%d的值:\n",i);
scanf("%d",&p->data);
r->link=p;
r=p;
}
r->link=NULL;
return L;
}
Nodep CreateListT(int n) //逆序创建
{
Node* L=NULL,*p=NULL;
int i;
L=(Node*)malloc(sizeof(Node));
L->link=NULL;
for(i=n;i>0;i--)
{
p=(Node*)malloc(sizeof(Node));
p->data=i;
p->link=L->link;
L->link=p;
}
return L;
}
Nodep InsertList(Nodep rootp,int value) //有对插入第一个结点,中间结点以及尾结点的考虑
{
Node *current=NULL,*pre=NULL,*new_node=NULL;
current=rootp->link;
while(current!=NULL && current->data<value)
{
pre=current;
current=current->link;
}
new_node=(Node*)malloc(sizeof(Node));
if(new_node==NULL)
printf("malloc failure");
new_node->data=value;
new_node->link=current;
if(pre==NULL)
rootp->link=new_node;
else
pre->link=new_node;
return rootp;
}
Nodep DeleteList(Nodep rootp,int i) //寻找第i个结点,并使current指向其前驱
{
Node*current=NULL;
Node *q=NULL;
int j=0;
current=rootp;
while(current->link && j<i-1)
{
current=current->link;
++j;
}
if(!(current->link) || j>i-1 )
{
printf("删除位置不合理\n");
exit(1);
}
q=current->link;
current->link=q->link;
free(q);
return rootp;
}
void ReadList(Nodep rootp)
{
int value;
Node * current;
current=rootp->link;
while(current!=NULL)
{
value=current->data;
printf("%d\n",value);
current=current->link;
}
}
int main()
{
Nodep list;
list=CreateListH(3);
// ReadList(list);
//InsertList(list,8);
DeleteList(list,3);
ReadList(list);
return 0;
}
单向链表的插入删除代码
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.