带头节点的循环单链表

#include<bits/stdc++.h>
using namespace std;
//带头节点的循环单链表

struct LNode{
	int data;
	LNode *next;
}; 

//初始化链表 
void InitList(LNode *&L){
	L=(LNode *)malloc(sizeof(LNode)); 
	L->next=L;
}

//判断链表是否为空
void isEmpty(LNode * &L){
	
	if(L->next==L) 
		cout<<"链表为空"<<endl;
	else
		cout<<"链表不空"<<endl;
	
} 

//按位查找元素
LNode * GetElem(LNode * &L,int i){
	
	int j=0;
	LNode *p=L;
	
	while(p->next!=L&&j<i){
		p=p->next;
		j++;
	}
	
	if(p->next==L&&j+1<i){
		return NULL;
	}
	
	return p;
} 


//按位插入元素 
void ListInsert(LNode * &L,int i,int value){
	
	if(i<1){
		cout<<"插入位置不合法"<<endl;
		return;
	}
	
	LNode *p=L,*t;
	p=GetElem(p,i-1);
	
	if(p==NULL){
		cout<<"插入位置不合法"<<endl;
		return;
	}
	
	t=(LNode *)malloc(sizeof(LNode));
	t->data=value;
	t->next=p->next;
	p->next=t;
	printf("%d插入成功\n",value);
} 

//按位删除元素
void ListDelete(LNode *&L,int i){
	
	if(i<1){
		cout<<"删除位置不合法"<<endl;
		return;
	}
	
	LNode *p=L;
	p=GetElem(p,i-1);
	
	if(p==NULL||p->next==L){
		cout<<"删除位置不合法"<<endl;
		return;
	}
	
	int value=p->next->data;
	p->next=p->next->next;
	printf("%d删除成功\n",value);
} 

//按位修改元素 
void ListUpdate(LNode *&L,int i,int value){
	
	if(i<1){
		cout<<"修改位置不合法"<<endl;
		return; 
	}
	
	LNode *p=L;
	p=GetElem(p,i);
	
	if(p==NULL){
		cout<<"修改位置不合法"<<endl;
		return;
	}
	
	p->data=value;
	printf("第%d个节点的数据修改为:%d\n",i,value);
} 


//遍历链表 
void ListShow(LNode *&L){
	
	LNode *p=L->next;
	while(p!=L){
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}


int main(){
	
	LNode *L;
	
	InitList(L); //初始化链表 
	
	isEmpty(L); //判断链表是否为空
	
	ListInsert(L,1,5); //插入节点 
	ListInsert(L,2,6);
	ListInsert(L,3,8);
	ListInsert(L,2,2);
	ListInsert(L,5,6);
	ListInsert(L,1,9);
	ListInsert(L,9,7);
	
	ListShow(L); //遍历链表 
	
	ListDelete(L,1); //删除元素 
 	ListDelete(L,5);
	ListDelete(L,3);
	ListDelete(L,9);
	
	ListShow(L); //遍历链表
	
	cout<<GetElem(L,1)->data<<endl; //查找元素 
	cout<<GetElem(L,2)->data<<endl;
	cout<<GetElem(L,3)->data<<endl;
	
	ListShow(L); //遍历链表
	
	ListUpdate(L,1,6); //修改元素
	ListUpdate(L,5,5);
	ListUpdate(L,2,8);
	ListUpdate(L,3,9);
	
	ListShow(L); //遍历链表 
	
	return 0;
} 

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值