内容都在代码和注释里
1.查找(按值和按序号查找)
2.插入
3.删除
4.链表长度
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data ;
struct LNode* next;
}LNode,*LinkNode;
void createLNode(LinkNode &L){ //尾插法创建单链表
int e;
L = (LNode*)malloc(sizeof(LNode));
LinkNode s,r=L;
cin>>e;
while(e!=-1){
s=(LNode*)malloc(sizeof(LNode));
s->data = e;
r->next = s; //尾结点下一个指向s
r = s; //r再次放到尾结点的位置
cin>>e;
}
r->next = NULL;
}
void printLNode(LinkNode L){ //打印单链表
L = L->next;
while(L){
cout<<L->data<<" ";
L=L->next;
}
cout<<endl;
return ;
}
LNode* getNoLNode(LinkNode L,int i){ //根据i的位置输出相应的元素
int j=1;
if(i<=0){ //i==0,头结点 i<0,不存在
return NULL;
}
LinkNode p = L->next;
while(p){
if(i==j){
//cout<<"data:"<<p->data<<endl;
break;
}
p=p->next;
j++;
}
return p;
}
void getELNode(LinkNode L,int e){ //根据e的值找到对应的位置 ,没有的话输出0
int j = 1;
L=L->next;
while(L){
if(L->data==e){
cout<<"NO."<<j<<endl;
return ;
}
L=L->next;
j++;
}
cout<<"0\n";
}
void insertLinkNode(LinkNode &L,int i){ //前插后插一个样 no 4 99 3 5 4 1 2 8 7
LinkNode s;
LinkNode p = getNoLNode(L,i-1);
s=(LinkNode)malloc(sizeof(LNode));
s->data = 99;
s->next = p->next;
p->next = s;
// ElemType temp = p->data; //后插操作,将数值交换 此时应该getNoLNode(L,i);
// p->data = s->data;
// s->data = temp;
}
void deleteLinkNode(LinkNode &L,int i){
LinkNode q,p;
p = getNoLNode(L,i-1);
q = (LinkNode)malloc(sizeof(LNode));
q=p->next;
p->next = q->next;
free(q);
}
void LinkNodeLength(LinkNode L){
int length = 0;
L = L->next;
while(L){
L=L->next;
length++;
}
cout<<length<<endl;
}
int main()
{
LinkNode L = NULL;
createLNode(L);
printLNode(L);
LinkNode num = getNoLNode(L,3);
cout<<"data:"<<num->data<<endl;
getELNode(L,5);
insertLinkNode(L,4);
printLNode(L);
deleteLinkNode(L,3);
printLNode(L);
LinkNodeLength(L);
free(L);
return 0;
}
如有错误,敬请指正!