#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node, *Linklist;
void Initlist(Linklist *L)
{
*L = (Linklist)malloc(sizeof(Node));
(*L)->next = NULL;
}
void fromhead(Linklist L)
{
Node *s;
int a;
int flag = 1;
while(flag)
{
cin >> a ;
if(a != -1)
{
s = (Node *)malloc(sizeof(Node));
s->data = a;
s->next = L->next;
L->next = s;
}
else flag = 0;
}
}
void output(Linklist L)
{
Node *r;
r = L->next;
while(r != NULL)
{
cout << r->data << " ";
r = r->next;
}
}
void fromend(Linklist L)
{
Node *m, *s;
int flag = 1, a;
m = L;
while(flag)
{
cin >> a;
if(a != -1)
{
s = (Node*)malloc(sizeof(Node));
s->data = a;
m->next = s;
m = s;//m = s;m 始终指向表尾,也就是一直往后推
}
else{
flag = 0;
m->next = NULL;//表尾的next置为空
}
}
}
Node *Get(Linklist L, int i)
{
Node *p;
int j = 0;
p = L;
if(i <= 0)
return NULL;
while(j < i && (p->next != NULL))
{
p = p->next;
j++;
}
if(i == j)
return p;
else return NULL;
}
Node * Findvalue(Linklist L, int e)
{
Node *p;
p = L->next;
while(p != NULL)
{
if(p->data != e)
p = p->next;
else break;
}
return p;
}
void Inslist(Linklist L, int i, int e)
{
Node *pre, *s;
pre = L;
int j = 0;
while(pre != NULL && j < i - 1)
{
pre = pre->next;
j++;
}
if(pre == NULL)
{
cout << "输入位置不合理";
return ;
}
s = new Node;
s->data = e;
s->next = pre->next;
pre->next = s;
return ;
}
void dellist(Linklist L, int i, int *e)
{
Node *pre, *r;
int j = 0;
pre = L;
while(pre->next != NULL && j < i - 1)
{
pre = pre->next;
j++;
}
if(pre->next == NULL)
{
cout << "删除结点的位置i不合法";
return;
}
r= pre->next;
pre->next = r->next;
*e = r->data;
free(r);//释放被删除的结点的空间
return ;
}
int main()
{
int i, e, m, j;
Linklist L;
Initlist(&L);
fromhead(L);
//fromend(L);
output(L);
cin >> i >> e;//查找函数无输出 返回的是地址,可已用*将其值取出来
Inslist(L, i, e);//插入第i个数,值为e
output(L);
cout << "\n";
cin >> j;
dellist(L, j, &m);
output(L);
return 0;
}
链表的基本操作
最新推荐文章于 2022-08-29 14:49:54 发布