#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode * next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=NULL;
return 0;
}
bool insert(LinkList &L,int i,int x){ //插入元素
if(i<1){
printf("插入不合法\n");
return 0;
}
if(i==1){
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L;
L=s;
printf("插入成功\n");
return true;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
printf("插入不合法\n");
return 0;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=p->next;
p->next=s;
printf("插入成功\n");
return true;
}
void look(LinkList &L) //遍历链表
{
int j=1;
LNode* p=L;
while(p!=NULL){
printf("第%d个元素的值为%d\n",j,p->data);
p=p->next;
j++;
}
}
bool Delete(LinkList &L,int i) //按照位序删除元素
{
if(i<1){
printf("位序不合法\n");
return 0;
}
LNode *p=L;
int j=1;
while(p->next!=NULL&&j<i-1)
p=p->next;
j++;
if(p==NULL){
printf("位序不合法\n");
return false;
}
printf("删除的元素为%d\n",p->next->data);
p->next=p->next->next;
return true;
}
void length(LinkList &L) //查看链表元素的个数
{LNode* p=L;
int j=0;
while(p!=0){
j++;
p=p->next;
}
printf("长度为%d\n",j);
}
bool alter(LinkList &L,int i,int s){ //根据位序改变值
if(i<1){
printf("位序不合法\n");
return 0;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
if(p==NULL)
{
printf("位序不合法\n");
return 0;
}
p->data=s;
printf("更改成功\n");
return true;
}
bool seek(LinkList &L,int i){ //根据位序查元素的值
if(i<1){
printf("位序不合法\n");
return 0;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
if(p==NULL)
{
printf("位序不合法\n");
return 0;
}
printf("第%d个元素值为%d",i,p->data);
}
int main(){
LinkList L;
InitList (L);
insert (L,1,1);
insert (L,2,2);
insert (L,3,3);
insert (L,4,4);
length(L);
look (L);
Delete(L,2);
look (L);
alter(L,1,9);
look (L);
seek(L,1) ;
return 0;
}