#include<bits/stdc++.h>
using namespace std;
struct LNode{
int data;
LNode *next;
};
void InitList(LNode *&L){
L=(LNode *)malloc(sizeof(LNode));
L->next=L;
}
void isEmpty(LNode * &L){
if(L->next==L)
cout<<"链表为空"<<endl;
else
cout<<"链表不空"<<endl;
}
LNode * GetElem(LNode * &L,int i){
int j=0;
LNode *p=L;
while(p->next!=L&&j<i){
p=p->next;
j++;
}
if(p->next==L&&j+1<i){
return NULL;
}
return p;
}
void ListInsert(LNode * &L,int i,int value){
if(i<1){
cout<<"插入位置不合法"<<endl;
return;
}
LNode *p=L,*t;
p=GetElem(p,i-1);
if(p==NULL){
cout<<"插入位置不合法"<<endl;
return;
}
t=(LNode *)malloc(sizeof(LNode));
t->data=value;
t->next=p->next;
p->next=t;
printf("%d插入成功\n",value);
}
void ListDelete(LNode *&L,int i){
if(i<1){
cout<<"删除位置不合法"<<endl;
return;
}
LNode *p=L;
p=GetElem(p,i-1);
if(p==NULL||p->next==L){
cout<<"删除位置不合法"<<endl;
return;
}
int value=p->next->data;
p->next=p->next->next;
printf("%d删除成功\n",value);
}
void ListUpdate(LNode *&L,int i,int value){
if(i<1){
cout<<"修改位置不合法"<<endl;
return;
}
LNode *p=L;
p=GetElem(p,i);
if(p==NULL){
cout<<"修改位置不合法"<<endl;
return;
}
p->data=value;
printf("第%d个节点的数据修改为:%d\n",i,value);
}
void ListShow(LNode *&L){
LNode *p=L->next;
while(p!=L){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main(){
LNode *L;
InitList(L);
isEmpty(L);
ListInsert(L,1,5);
ListInsert(L,2,6);
ListInsert(L,3,8);
ListInsert(L,2,2);
ListInsert(L,5,6);
ListInsert(L,1,9);
ListInsert(L,9,7);
ListShow(L);
ListDelete(L,1);
ListDelete(L,5);
ListDelete(L,3);
ListDelete(L,9);
ListShow(L);
cout<<GetElem(L,1)->data<<endl;
cout<<GetElem(L,2)->data<<endl;
cout<<GetElem(L,3)->data<<endl;
ListShow(L);
ListUpdate(L,1,6);
ListUpdate(L,5,5);
ListUpdate(L,2,8);
ListUpdate(L,3,9);
ListShow(L);
return 0;
}
