4
3
2
5
6
-1
4 3 2 5 6
表长5
3在第几位2
4 3 2 1 5 6
表长6
4 3 2 1 0 5 6
表长7
4 3 1 0 5 6
表长6
#include<iostream>
using namespace std;
#include<stdio.h>
typedef struct LNode
{ int Data;
struct LNode * next;
}LNode,*LikList;
LikList CreatLinklist1(){
LikList L=NULL;
LNode *s;
int x;
cin>>x;
while (x!=-1)
{
s=(LNode *)malloc(sizeof(LNode));
s->Data=x;
s->next=L;
L=s;
cin>>x;
}
return L;
}
LikList CreatLinklist2(){
LikList L=NULL;
LNode *s,*R=NULL;
int x;
cin>>x;
while (x!=-1)
{ s=(LNode *)malloc(sizeof(LNode));
s->Data=x;
if(L==NULL)L=s;
else R->next=s;
R=s;
cin>>x;
}
return L;
}
void coutLNode(LikList L){
LNode *s;
s=L;
while(s->next){
s=L;
cout<<s->Data<<" ";
L=s->next;
}
cout<<endl;
}
int LenghtLinkList(LikList L){
if(L==NULL)
return 1;
LNode *s;//把第一结点的地址给到*s
s=L;
int j=0;//不带头结点的,初始值因该为一,s=L第一结点已经算了
while(s){//如果为空的话就是最后个结点
s=s->next;
j++;
}
return j;
}
bool panduan(LikList L,int n){
int j=0;
LNode *s;
s=L;
while (s)
{ j++;
s=s->next;
}
if(j>=n)
return true;
else return false;
}
int chahzhaoLinkList(LikList L,int n){
LNode *s;//*s==L是错误的*s不是指针 s,L,指针
s=L;//把第一结点的地址给到*s
//cout<<L<<endl;
int j=1;//不带头结点的,初始值因该为-1,s=L第一结点已经算了
while(s){//如果为空的话就是最后个结点
if(s->Data==n)
return j;
s=s->next;
j++;
}
return -1;
}
void qcharuLinkList(LikList L,int n,int x){
LNode *s,*p;
s=L;
int j=1;
bool b=panduan(L,n);
if(b==false)
{cout<<"位置不合适"<<endl;return ;}
/* 中间应该调用查第x个元素是否存在 不存在应该直接*/
while(s){
j++;
if(n==j)
{p=(LNode *)malloc(sizeof(LikList)); //为插入的数据申请新空间
p->Data=x;
p->next=s->next;//把S的下一个地址给到P
s->next=p;//把P的地址放入S的下一个地址
break;
}
s=s->next;
}
}
void hcharuLinkList(LikList L,int n,int x){
LNode *s,*p;
s=L;
int j=1;
bool b=panduan(L,n);
if(b==false)
{cout<<"位置不合适"<<endl;return ;}
while(s){
j++;
if(n==j)
{
p=(LNode *)malloc(sizeof(LikList));
p->Data=x;
p->next=s->next;
s->next=p;
break;
}
s=s->next;
}
}
void delLinkList(LikList L,int n){
LNode *s,*p;
int j=1;
s=L;
/*判断n的位置存在不*/
bool b=panduan(L,n);
if(b==false)
{cout<<"位置不合适"<<endl;return ;}
while(s){
j++;
if(j==n){
p=s->next;//把的下一个地址给到P
s->next=p->next;//把P的下一地址给到s
free(p);//释放p的空间
break;
}
s=s->next;
}
}
int main(){
LikList L1;//L1是头节点地址
LikList L2;//L1是头节点地址
//L1=CreatLinklist1();//头插法建立链表,L1最前面值得地址,一直改变
//coutLNode(L1);
L2=CreatLinklist2();//尾部插法建立链表,L2开始固定
coutLNode(L2);
cout<<"表长"<<LenghtLinkList(L2)<<endl;
cout<<"3在第几位"<<chahzhaoLinkList(L2,3)<<endl;
qcharuLinkList(L2,4,1);//在第2位前面插入
coutLNode(L2);
cout<<"表长"<<LenghtLinkList(L2)<<endl;
hcharuLinkList(L2,5,0);//在第2位后面插入
coutLNode(L2);
cout<<"表长"<<LenghtLinkList(L2)<<endl;
delLinkList(L2,3);
coutLNode(L2);
cout<<"表长"<<LenghtLinkList(L2)<<endl;
free(L2);//释放L2的空间
}