#include<iostream>
#include<stdlib.h>
#include<string>
#include<list>
typedef int ElemType;
using namespace std;
//使用的引用的前提是看子函数力要不要改变主函数的变量,要改,就加。
//链表
//头指针:链表中第一个结点的存储位置,用来标识单链表(永不为空)
//头结点:在单链表第一个节点之前附加一个结点为方便操作
typedef struct LNode{ //单链表结点类型
ElemType data; //数据域
struct LNode *next;//指针域
}LNode,*LinkList;
//头插法创建链表
LinkList GreatL(LinkList &L){
LNode *q;
int x;
L=(LNode*)malloc(sizeof(LNode));
cin>>x;
while(x!=9999){
q=(LNode*)malloc(sizeof(LNode));
q->data=x;
q->next=L->next;
L->next=q;
cin>>x;
}
return L;
}
//尾插法创建单链表
LinkList GreatL2(LinkList &L){
int i;
LNode *p,*q;
L=(LNode*)malloc(sizeof(LNode));
p=L;
cin>>i;
while(i!=9999){
q=(LNode*)malloc(sizeof(LNode));
q->data=i;
p->next=q;
p=q;
cin>>i;
}
return L;
}
//链表查找:按值
LinkList Get2(LinkList L,ElemType e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
//链表查找:按序号
LinkList Get(LinkList L,int i){
int j=1;
LNode *p=L->next;
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
//在第i个位置插入数据
bool ListInt(LinkList L,int i,ElemType e){
LinkList p=Get(L,i-1);
if(p==NULL){
return false;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//安位置删除结点
bool ListD(LinkList L,int i){
LinkList p=Get(L,i-1);
if(p==NULL){
return false;
}
p->next=p->next->next;
}
//打印链表
int PrintList(LinkList L){//不加引用改变不了L的值
L=L->next;
while(L!=NULL){
cout<<L->data<<"\t";
L=L->next;
}
return 0;
}
int main(){
LinkList L;//头
// LinkList sear,loca;//用来存储某一个结点
// GreatL(L);
GreatL2(L);
// sear=Get(L,3);
// if(sear!=NULL){
// cout<<"查找成功"<<endl;
// cout<<sear->data<<endl;
// }else{
// cout<<"查找失败"<<endl;
// }
// loca=Get2(L,45);
// if(loca!=NULL){
// cout<<"查找成功"<<endl;
// cout<<loca->data<<endl;
// }else{
// cout<<"查找失败"<<endl;
// }
// ListInt(L,3,20);
ListD(L,4);
PrintList(L);
}
不能同时运行会由冲突