#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode * next;
}LNode, *LinkList;
void InitList(LinkList &L) //初始化单链表
{
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
}
int length(LinkList &L){ //查看单链表的长度
int len=0;
LNode *p=L;
while(p->next!=NULL)
{
p=p->next;
len++;
}
printf("length=%d\n",len) ;
return len;
}
bool insert(LinkList &L,int i,int x){ //插入元素
if(i<1){
printf("插入不合法\n");
return 0;
}
LNode *p=L;
int j=0;
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->next!=NULL){
p=p->next;
printf("第%d个元素的值为%d\n",j,p->data);
j++;
}
}
bool seek (LinkList&L,int i) //按照位序查找节点
{
if(i<1){
printf("位序不合法");
return 0;
}
int j=0;
LNode *p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
if(p==NULL){
printf("位序不合法\n");
return 0;
}
printf("第%d为元素的值为%d\n",i,p->data);
return true;
}
bool get(LinkList &L,int x){ //按照值查找元素
LNode *p=L;
int j=0;
while(p!=NULL&&p->data!=x){
p=p->next;
j++;
}
if(p==NULL){
printf("未查找到该元素\n");
return 0;
}
printf("第%d个元素的值为%d\n",j,p->data);
return true;
}
bool Delete(LinkList &L,int i) // 删除元素
{
if(i<1){
printf("位序不合法");
return 0;
}
int j=0;
LNode *p=L;
while(p->next!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p->next==NULL){
printf("位序不合法\n");
return 0;
}
p->next=p->next->next;
printf("删除成功");
return true;
}
bool alter(LinkList &L,int i,int a){
if(i<1){
printf("位序不合法");
return 0;
}
LNode *p=L;
int j=0;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL){
printf("位序不合法");
return 0;
}
p->data=a;
printf("更改成功");
}
int main(){
LinkList L;
InitList (L);
length(L);
insert(L,1,1);
insert(L,1,2);
insert(L,1,3);
insert(L,1,4);
length(L);
look(L);
seek(L,1); //查找第 1位
get(L,4); //查找值为 4的元素
Delete(L,5);
look(L);
alter(L,1,9) ; //将第一个元素的值更改为9
look(L);
}