#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
Linklist CreateList_end(int n);//尾插法建立链表
void ShowList(Linklist L);//输出链表内容
void Addnode(Linklist L,int i,int x);//向单链表的第i个位置插入数x
void Deletenode(Linklist L,int i);//删除单链表的第i个节点
int main(void)
{
Linklist L1;
int n;
scanf("%d",&n);
L1=CreateList_end(n);
Addnode(L1,2,100);
Deletenode(L1,5);
ShowList(L1);
return 0;
}
Linklist CreateList_end(int n)
{
Linklist head=(Linklist)malloc(sizeof(Node));
Node *p,*e;
p=head;
int x;
for(int i=0; i<n; i++)//尾插法建立链表
{
e=(Linklist)malloc(sizeof(Node));
scanf("%d",&x);
e->data=x;
p->next=e;
p=e;
}
p->next=NULL;//将链表的最后一个节点的指针域置空
head=head->next;//因为头结点为空,所以所以指向下一个节点这样才有数据域
return head;
}
void ShowList(Linklist L)//输出链表内容
{
while(L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
void Addnode(Linklist L,int i,int x)//向单链表的第i个位置插入数x
{
Node *p;
int k=1;
if(i<=1)//如果在第一个位置之前插入,则出错
{
printf("error\n");
return;
}
while(L!=NULL&&k<i-1)//找到第i-1个节点
{
L=L->next;
k++;
}
if(L==NULL)//如果找到了链表最后仍未找到,则出错
{
printf("位置不合理\n");
return;
}
p=(Linklist)malloc(sizeof(Node));
p->data=x;
p->next=L->next;
L->next=p;
}
void Deletenode(Linklist L,int i)//删除单链表的第i个节点
{
Node *p;
int k=1;
while(L->next!=NULL&&k<i-1)//寻找被删除的节点i的前驱节点i-1,使L指向他
{
L=L->next;
k++;
}
if(L->next==NULL)//因为L->next为空,没有找到合法的前驱位置,说明删除位置i不合法
{
printf("删除位置不合理\n");
return;
}
p=L->next;
L->next=p->next;
free(p);//释放节点p;
}
向单链表中插入、删除节点
最新推荐文章于 2024-04-16 12:20:50 发布