栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】数据结构之单链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】数据结构之单链表

文章目录
    • 1.头插法创建单链表
    • 2. 尾插法创建单链表
    • 3.单链表长度
    • 4.单链表删除操作
    • 5.单链表插入操作
    • 6.单链表逆置
    • 7.单链表遍历
    • 8.主函数部分
    • 9.完整代码

1.头插法创建单链表
LK creat_TList(){
	LK head,p;
	head=new LinkList;
	head->next=NULL;
	int x;
	cin>>x;
	while(x!=-1){
		p=new LinkList;
		p->data=x;
		p->next=head->next;
		head->next=p;
		cin>>x;
	}
	return head;
}
2. 尾插法创建单链表
LK creat_WList(){
	LK head,p,r;
	head=new LinkList;
	head->next=NULL;
	r=head;
	int x;
	cin>>x;
	while(x!=-1){
		p=new LinkList;
		p->data=x;
		p->next=r->next;
		r->next=p;
		r=p;
		cin>>x;
	}
	r->next=NULL;
	return head;
}
3.单链表长度
void listlength(LK head){
	LK L;
	L=head->next;
	while(L){
		length++;
		L=L->next;
	}
}
4.单链表删除操作
LK delet(LK head){
	LK L,p;
	L=head;
	int flag;
	cin>>flag;
	//flag=1 按位置删除
	if(flag==1){
		int k;
		cin>>k;
		if(k>length) return head;
		for(int i=0;i
			L=L->next;
		}
		p=new LinkList;
		p=L->next;
		L->next=p->next;
		free(p);
		length--;
	    }
	//flag=2 按元素删除
	else if(flag==2){
		int x;
		cin>>x;
		while(L->next&&L->next->data!=x){
			    L=L->next;
		}
		//如果删除链表中指定元素
		
		p=new LinkList;
		p=L->next;
		L->next=p->next;
		free(p);
		length--;
	  }
	return head;
}
5.单链表插入操作
LK insertx(LK head){
	LK L,p;
	L=head;
	int k,x;
	cin>>k>>x;
	if(k>length+1) return head;
	for(int i=0;i
		L=L->next;
	}
	p=new LinkList;
	p->data=x;
	p->next=L->next;
	L->next=p;
	length++;
	return head;
}
6.单链表逆置
LK inversion_List(LK head){
	   LK p,L,r;
	   r=head->next;
	   L=new LinkList;
	   L->next=NULL;
	   while(r){
			p= new LinkList;
		  p->data=r->data;
		  p->next=L->next;
		  L->next=p;
		  r=r->next;
	  }
	  free(head);
	  return L;
}
7.单链表遍历
void Printf_List(LK head){
	LK L;
	L=head->next;
	while(L){
		cout<data<<" ";
		L=L->next;
	}
}
8.主函数部分
int main(){
	LK head1,head2;
	head1=new LinkList;
	head1=creat_TList();
	Printf_List(head1);
	cout< 
9.完整代码 
#include
using namespace std;
typedef struct LinkList{
	int data;
	struct LinkList *next;
}LinkList,*LK;
int length;
//头插法创建单链表
LK creat_TList(){
	LK head,p;
	head=new LinkList;
	head->next=NULL;
	int x;
	cin>>x;
	while(x!=-1){
		p=new LinkList;
		p->data=x;
		p->next=head->next;
		head->next=p;
		cin>>x;
	}
	return head;
}
//尾插法创建单链表
LK creat_WList(){
	LK head,p,r;
	head=new LinkList;
	head->next=NULL;
	r=head;
	int x;
	cin>>x;
	while(x!=-1){
		p=new LinkList;
		p->data=x;
		p->next=r->next;
		r->next=p;
		r=p;
		cin>>x;
	}
	r->next=NULL;
	return head;
}
//单链表长度
void listlength(LK head){
	LK L;
	L=head->next;
	while(L){
		length++;
		L=L->next;
	}
}
//单链表删除
LK delet(LK head){
	LK L,p;
	L=head;
	int flag;
	cin>>flag;
	//flag=1 按位置删除
	if(flag==1){
		int k;
		cin>>k;
		if(k>length) return head;
		for(int i=0;i
			L=L->next;
		}
		p=new LinkList;
		p=L->next;
		L->next=p->next;
		free(p);
		length--;
	    }
	//flag=2 按元素删除
	else if(flag==2){
		int x;
		cin>>x;
		while(L->next&&L->next->data!=x){
			    L=L->next;
		}
		//如果删除链表中指定元素
		
		p=new LinkList;
		p=L->next;
		L->next=p->next;
		free(p);
		length--;
	  }
	return head;
}
//插入新元素
LK insertx(LK head){
	LK L,p;
	L=head;
		int k,x;
		cin>>k>>x;
		if(k>length+1) return head;
		for(int i=0;i
			L=L->next;
		}
		p=new LinkList;
		p->data=x;
		p->next=L->next;
		L->next=p;
		length++;
		return head;
}
//单链表逆序输出
LK inversion_List(LK head){
	   LK p,L,r;
	   r=head->next;
	   L=new LinkList;
	   L->next=NULL;
	     while(r){
			p= new LinkList;
		     p->data=r->data;
		     p->next=L->next;
		     L->next=p;
		     r=r->next;
	   }
	   free(head);
	   return L;
}
//遍历单链表
void Printf_List(LK head){
	LK L;
	L=head->next;
	while(L){
		cout<data<<" ";
		L=L->next;
	}
}
int main(){
	LK head1,head2;
	head1=new LinkList;
	head1=creat_TList();
	Printf_List(head1);
	cout< 

如有错误,希望各位大佬及时纠正一下!
希望能帮到更多的人!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886803.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号