#include<stdio.h>
#include<stdlib.h>
typedef int elemType;
typedef struct Node{
elemType date;
struct Node *next;
}Node;
//头插法建立单链表
Node *LinkedListCreatH(){
Node *L;
L = (Node *)malloc(sizeof(Node));//给头指针申请空间
L->next = NULL;//初始化头结点
elemType x;
while(scanf("%d",&x)!=EOF){
Node *p;
p = (Node *)malloc(sizeof(Node));
p->date = x;
p->next=L->next;
L->next=p;
}
return L;
}
//尾差法建立单链表
Node *LinkedListCreatT(){
Node *L;
L=(Node *)malloc(sizeof(Node));
L->next=NULL;
Node *r;
r=L;
elemType x;
while(scanf("%d",&x)!=EOF){
Node *p;
p=(Node *)malloc(sizeof(Node));
p->date=x;
r->next=p;
r=p;
}
r->next=NULL;
return L;
}
//在L链表的i位置上插入数据x
Node *LinkedListInsert(Node *L,int i,elemType x){
Node *pre;//出入位置的前驱结点
Node *p;//将要插入的节点
p = (Node *)(malloc(sizeof(Node)));
pre=L;
int temp;
for(temp=1;temp<i;temp++){
pre=pre->next;
}
p->date=x;
p->next=pre->next;
pre->next=p;
return L;
}
//在L链表上删除数据为x的节点
Node *LinkedListDelete(Node *L,elemType x){
Node *pre,*p;
p=L->next;
while(p->date!=x){
pre=p;
p=p->next;
}
pre->next=p->next;
free(p);
return L;
}
//打印单链表
void printfLink(Node *L){
if(L==NULL){
printf("链表为空\n");
}
Node *p;
p = (Node *)malloc(sizeof(Node));
p=L->next;
while(p!=NULL){
printf("%d,",p->date);
p=p->next;
}
}
void main(){
Node *L = LinkedListCreatT();
printfLink(L);
printf("\n");
LinkedListInsert(L,3,20);
//LinkedListCreatH();
printfLink(L);
printf("\n");
LinkedListDelete(L,20);
printfLink(L);
}
链表的创建、插入、删除(c语言)
最新推荐文章于 2022-04-15 20:57:56 发布