#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;
}
單向鏈表的插入刪除代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.