#include<bits/stdc++.h>
using namespace std;
//没有头节点的单链表
#define ElemType int
struct LNode{ //定义单链表节点类型
ElemType data; //数据元素
LNode *next; //指向下一个节点的指针
};
//初始化链表
void InitList(LNode * &L){
L=NULL; //当前链表为空
}
//插入节点
void ListInsert(LNode * &L,int i,int value){
if(i<1){
cout<<"插入位置不合法"<<endl;
return;
}
if(i==1){ //插入到第一个节点前面需要处理
LNode *t=(LNode *)malloc(sizeof(LNode));
t->data=value;
t->next=L;
L=t;
return;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i-1){ //找到要插入位置的前一个节点
p=p->next;
j++;
}
if(p==NULL){
cout<<"插入位置不合法"<<endl;
return;
}
LNode *t=(LNode *)malloc(sizeof(LNode)); //为要插入的节点分配空间
t->data=value;
t->next=p->next; //插入操作
p->next=t;
cout<<"插入成功"<<endl;
}
//按位删除节点
void ListDelete(LNode * &L,int i){
if(i<1){
cout<<"删除位置不合法"<<endl;
return;
}
if(i==1){ //删除第一个节点需要特殊处理
LNode *t=L;
L=L->next;
cout<<t->data<<"删除成功"<<endl;
free(t); //释放要删除节点的空间
return;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i-1){ //找到要删除节点的前一个节点
p=p->next;
j++;
}
if(p==NULL||p->next==NULL){
cout<<"删除位置不合法"<<endl;
return;
}
LNode *t=p->next;
int value=t->data; //删除操作
p->next=t->next;
free(t); //释放要删除节点的空间
cout<<value<<"删除成功"<<endl;
}
//按位查找节点
void GetElem(LNode *L,int i){
if(i<1){
cout<<"查找位置不合法"<<endl;
return;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i){ //找到要查找的节点
p=p->next;
j++;
}
if(p==NULL){
cout<<"查找位置不合法"<<endl;
return;
}
int value=p->data;
printf("查找成功,第%d个节点元素为:%d\n",i,value);
}
//按位修改节点
void ListUpdate(LNode * &L,int i,int value){
if(i<1){
cout<<"修改位置不合法"<<endl;
return ;
}
LNode *p=L;
int j=1;
while(p!=NULL&&j<i){ //找到要修改的节点
p=p->next;
j++;
}
if(p==NULL){
cout<<"修改位置不合法"<<endl;
return ;
}
p->data=value;
printf("修改成功,第%d个节点数据修改为:%d\n",i,value);
}
//遍历链表
void ShowList(LNode * &L){
LNode *T=L;
while(T!=NULL){
cout<<T->data<<" ";
T=T->next;
}
cout<<endl;
}
int main(){
LNode *L; //定义一个节点指针
InitList(L); //初始化链表
ListInsert(L,1,5); //插入节点
ListInsert(L,2,3);
ListInsert(L,2,6);
ListInsert(L,3,1);
ListInsert(L,2,8);
ListInsert(L,6,7);
ShowList(L); //遍历链表
ListDelete(L,1); //删除节点
ListDelete(L,9);
ListDelete(L,4);
ShowList(L); //遍历节点
GetElem(L,1); //查找节点
GetElem(L,2);
GetElem(L,9);
ListUpdate(L,1,6); //修改节点
ListUpdate(L,3,5);
ListUpdate(L,8,6);
ShowList(L); //遍历节点
return 0;
}
02-16
6867
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交