#include<stdio.h>
typedef struct Node {
int data;
struct Node* next;}ScList;// 初始化
ScList*InitList(ScList*L){L=(ScList*)malloc(sizeof(ScList));L->next =NULL;
ScList* p,* q;
int dat;
q =L;printf("请输入你的数据:");scanf("%d",&dat);while(dat){
p =(ScList*)malloc(sizeof(ScList));
p->data = dat;
p->next = q->next;
q->next = p;
q = p;printf("请输入你的数据:");scanf("%d",&dat);}
q->next =NULL;returnL;}// 插入元素
int InsertList(ScList*L, int i, int e){if(i<1|| i>LengthList(L)+1){printf("插入的位置有误!");return;}
ScList* p,* q;
p =L;for(int l =1; l < i; l++){
p = p->next;}
q =(ScList*)malloc(sizeof(ScList));
q->data = e;
q->next = p->next;
p->next = q;}// 删除元素
int DeleteList(ScList*L, int i){if(EmptyList(L)){printf("链表为空!");return;}if(i <1|| i>LengthList(L)){printf("删除的位置有误!");return;}
ScList* p,* q;
p =L;for(int l =1; l < i; l++){
p = p->next;}
p->next = p->next->next;}// 判断是否为空
int EmptyList(ScList*L){returnLengthList(L)==0;}// 返回链表的长度
int LengthList(ScList*L){
ScList* p;
int count =0;
p =L->next;while(p !=NULL){
count++;
p = p->next;}return count;}// 遍历链表
int TraverseList(ScList*L){
ScList* p;
p =L->next;while(p !=NULL){printf("%d ", p->data);
p = p->next;}putchar('\n');}
int main(){
ScList*L=NULL;L=InitList(L);
int select, i, e;while(1){printf("1、插入元素 2、删除元素 3、遍历输出 4、退出程序\n");printf("请输入你要进行的操作:");scanf("%d",&select);if(select ==1){printf("请输入你要插入的位置:");scanf("%d",&i);printf("请输入你要插入的元素:");scanf("%d",&e);InsertList(L, i, e);}elseif(select ==2){printf("请输入你要删除的位置:");scanf("%d",&i);DeleteList(L, i);}elseif(select ==3){TraverseList(L);}else{break;}}}