#include <iostream>
using namespace std;
//定义结点类型
typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;
//初始化链表
void InitList(LinkList &L){
L=new LNode;
L->next=NULL;
}
//创建连表
LinkList tailInsert(LinkList &L){
InitList(L);
LNode *s,*r=L;
int x;
cin>>x;
while(x!=9999){
s=new LNode;
s->data=x;
r->next=s;
r=s;
cin>>x;
}
r->next=NULL;
return L;
}
//遍历链表
void PrintList(LinkList L){
LNode*p=L->next;
while(p){
cout<<p->data<<"";
p=p->next;
}
}
//求链表长度
int Length(LinkList L){
LNode*p=L->next;
int len=0;
while(p){
len++;
p=p->next;
}
return len;
}
//查找第i位结点
LNode *GetElem(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;
}
//插入e到i的前面
void Insert(LinkList &L,int i,int e){
LNode *p=GetElem(L,i-2);
LNode *s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
}
//删除i
void Delete(LinkList &L,int i){
if(i<1||i>Length(L)){
cout<<"wrong"<<endl;
return ;
}
LNode *p=GetElem(L,i-1);
LNode *q=p->next;
p->next=q->next;
delete q;
}
//逆序
void Convert(LinkList &L){
LNode *p,*q,*r;
p=L->next;
q=p->next;
p->next=NULL;
while(q){
r=q->next;
q->next=p;
L->next=q;
p=q;
q=r;
}
}
int main(){
LinkList L=tailInsert(L); //初始化,尾插法建立链表
Insert(L,3,666); //在第二个位置插入666
PrintList(L); //打印插入后的链表
Delete(L,3); //删除第三个结点
PrintList(L); //打印删除后的链表
Convert(L); //逆序
PrintList(L); //打印逆序链表
cout<<"链表的长度:"<<Length(L)<<endl; //输出链表长度
return 0;
}
c++单链表的基础操作
最新推荐文章于 2024-10-08 06:04:53 发布