链表

#include <iostream>
#include <cstdio>
#include <algorithm>
//#difine NULL 0;
using namespace std;
typedef struct node
{
	int data;
	struct node *next;
}lnode,*linklist;
void Creat_linklist_before();
void Creat_linklist_after();
void Print_linklist();
void Insert_linklist_before();
void Del_LinkList();
void Reverse();
linklist head=(linklist)malloc(sizeof(lnode));
int main(int argc, char *argv[])
{
	Creat_linklist_after();
	bool t=true;
	while(t)
	{
		printf("\n\n*******************************\n\n");
		printf("	1.在第i个位置插入元素k\n");
		printf("	2.删除元素x\n");
		printf("	3.输出所有链表元素\n");
		printf("	4.将链表逆序\n");
		printf("	5.退出操作\n\n");
		printf("*******************************\n\n") ;
		printf("请输入你想要进行的操作:");
		int choice;
		cin>>choice;
		printf("\n");
		switch(choice)
		{
			case 1:Insert_linklist_before();break;
			case 2:Del_LinkList();break;
			case 3:Print_linklist();break;
			case 4:Reverse();break;
			case 5:t=false;break;
			default:printf("重新选择你的操作\n");break;
		}
	}
	return 0;
}
void Creat_linklist_before()
{
	printf("请输入数字:");
	head->data=NULL;
	head->next=NULL;
	int x;
	while(cin>>x&&x!=-1000)
	{
		linklist s=(linklist)malloc(sizeof(lnode));
		s->data=x;
		s->next=NULL;
		s->next=head->next;
		head->next=s;
	}
}
void Creat_linklist_after()
{
	printf("请输入数字:");
	head->data=NULL;
	head->next=NULL;
	int x;
	linklist now=head;
	while(cin>>x&&x!=-1000)
	{
		linklist s=(linklist)malloc(sizeof(lnode));
		s->data=x;
		s->next=NULL;
		now->next=s;
		now=s;
	}
}
void Print_linklist()
{
	printf("当前链表为:");
	linklist p=(linklist)malloc(sizeof(lnode));
	p=head->next;
	while(p!=NULL)
	{
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
}
void Insert_linklist_before()
{
	printf("请输入你想插入的位置:");
	int i;
	cin>>i;
	printf("请输入你想插入的数字:");
	linklist k=(linklist)malloc(sizeof(lnode));
	cin>>k->data;
	k->next=NULL;
	linklist _now;
	_now=head;
	for(int j=1;j<i&&_now->next!=NULL;j++)
		 _now=_now->next;
	k->next=_now->next;
	_now->next=k;
	Print_linklist();
}
void Del_LinkList()
{
	printf("请输入想删除的位置:");
	int i;
	cin>>i;
	linklist _now=head,_next;
	for(int j=1;j<i;j++)
	{
		if(_now->next==NULL)
		{
			printf("该位置不存在数字!");
			return;
		}
		_now=_now->next;
	}
	_next=_now->next;
	if(_now->next->next!=NULL)
	{
		_now->next=_now->next->next;
		free(_next);
	}
	else
		_now->next=NULL;
	Print_linklist();
}
void Reverse()
{
	linklist _now=(linklist)malloc(sizeof(lnode)),
			_next=(linklist)malloc(sizeof(lnode));
	_now=head->next;
	head->next=NULL;
	while(_now)
	{
		_next=_now->next;
		_now->next=head->next;
		head->next=_now;
		_now=_next;
	}
	Print_linklist();
}

emmm,其实删除的部分还是有一点毛病,等有空了再优化删除长度外的bug

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值