#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