#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;
}LinkNode,*LinkList;
/* 用头插法建立一个单链表*/
void CreateList_tou(LinkList head){
LinkList p;
int num;
while(scanf("%d",&num),num!=-1){
p=(LinkList)malloc(sizeof(LinkNode));
p->data=num;
p->next=head->next;
head->next=p;
}
}
/*用尾插法建立一个单链表*/
void CreateList_tail(LinkList head){
LinkList p,tail;
int num;
tail=head;
while(scanf("%d",&num),num!=-1){
p=(LinkList)malloc(sizeof(LinkNode));
p->data=num;
tail->next=p;
tail=p;
}
tail->next=NULL;
}
/*遍历单链表*/
void trans(LinkList head){
LinkList p=head->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
/*在第n个结点后插入一个值为e的结点p*/
void Insert(LinkList head,int e,int n){
LinkList p,pre;
int j=0;
pre=head;
while(pre && j<n-1 ){
pre=pre->next;
j++;
}
if(!pre || n<1){
printf("输入的位置错误!");
return ;
}
p=(LinkList)malloc(sizeof(LinkNode));
p->data=e;
p->next=pre->next;
pre->next=p;
}
/*删除链表中第n个节点的值,并返回*/
void Delete(LinkList head ,int n){
LinkList p,pre;
int e,j=0;
pre=head;
while(pre && j<n-1){
pre=pre->next;
j++;
}
if(!pre || n<1){
printf("输入的位置错误!\n");
return ;
}
p=(LinkList)malloc(sizeof(LinkNode));
p=pre->next;
e=p->data;
pre->next=p->next;
free(p);
printf("删除的元素为:%d\n",e);
}
/*主函数*/
void main(){
int i;
LinkList p;
p=(LinkList)malloc(sizeof(LinkNode));
p->next=NULL; //初始化一个空的单链表:head的naxt域为空
printf("请输入若干整数:\n");
//CreateList_tou(p);
CreateList_tail(p);
trans(p);
#if(0)
printf("请输入插入的数值: ");
scanf("%d",&num);
printf("\n");
//printf("请输入插入的位置: ");
//scanf("%d",&i);
//printf("\n");
//Insert(p,num,i);
trans(p);
#endif
printf("请输入删除的位置: ");
scanf("%d",&i);
Delete(p ,i);
trans(p);
}
单链表的基本操作
最新推荐文章于 2023-08-16 17:51:34 发布