#include
#include
#include
typedef struct LNode{
int data;
struct LNode *next;//一个指向LNode类型结构的指针变量 (指针域)
}LNode,*LinkList;
//单链表初始化
int InitList_L(LinkList &L){
L = (LinkList)malloc( sizeof(LNode) );
L->next = NULL; //先建一个带头节点的单链表
printf("单链表初始化成功!\n");
return 0;
}
//头插法创建链表
int CreateList_L(LinkList &L,int n){
LinkList p;//起始位置
for(int i = n;i > 0;i--){
p = (LinkList)malloc( sizeof(LNode) ); //生成新结点
scanf("%d",p->data);
p->next = L->next;
L->next = p;
}
printf("创建成功!\n");
return 0;
}
//查找第i个元素
int GetElem_L(LinkList &L,int i){
LinkList p;
p = L->next;
int j = 1;
int e;
while(p && j < i){
p = p->next;
j++;
}
if(!p || j > i){
printf("第%d个元素不存在\n",i);
}
e = p->data;
printf("查找元素为:%d\n",e);
return 0;
}
//第i个位置插入元素
int ListInsert_L(LinkList &L,int i,int e){
LinkList p = L;
LinkList s;
int j = 0;
while(p && j < i-1){
p = p->next;
j++;
}
if(!p || j > i-1){
printf("插入错误!\n");
}
s = (LinkList)malloc( sizeof(LNode) );
s->data = e;
s->next = p->next;
p->next = s;
printf("插入成功!\n");
return 0;
}
//删除第i个元素
int ListDelete_L(LinkList &L,int i){
LinkList p = L;
LinkList q;
int j = 0;
int e;
while( p->next && j < i-1 ){
p = p->next;
j++;
}
if( !(p->next) || j > i-1 ){
printf("删除错误!\n");
}
q = p->next;
p->next = q->next;
e = q->data;
printf("删除成功!\n");
free(q);
return 0;
}
//打印链表
int PrintList_L(LinkList &L){
LinkList p;
p = L->next;
if(p == NULL){
printf("这是一个空链表!\n");
}
while(p){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
return 0;
}
int main(){
LinkList List;
int n;//链表元素个数
int i;//链表元素位置
int e;//链表插入的元素
printf("输入链表元素个数:");
scanf("%d",&n);
InitList_L(List);
printf("输入链表:\n");
CreateList_L(List,n);
printf("链表创建如下:\n");
PrintList_L(List);
printf("输入查找的位置:");
scanf("%d",&i);
GetElem_L(List,i);
printf("输入插入的位置和插入元素:");
scanf("%d %d",&i,&e);
ListInsert_L(List,i,e);
printf("新链表如下:\n");
PrintList_L(List);
printf("输入删除的位置:");
scanf("%d",&i);
ListDelete_L(List,i);
printf("新链表如下:\n");
PrintList_L(List);
return 0;
}