首先简单的存入一组连续的数据,以 -1 结束
思路:
单链表输入: 申请一个表头的空间 a,并且 a->next 初始为NULL,在表头不存储数据信息,只用来指向链表的头部!(个人认为方便之处在于,判断a->next是否为空即可得知接下来有没有有效信息)用一个临时的指针p,去指向链表的尾部,存储时,申请空间,造出表尾,用原来表尾的next去连接这个新的表尾。
单链表输出: 用循环不断从表头指向表尾,顺便输出元素。不过要注意,初始化p=head->next;
#include<bits/stdc++.h>
using namespace std;
struct node
{
int data;
node *nex;
};
void input(node *head)
{
printf("\nINPUT\n");
node *p;
p=head;/*指向表头*/
int a;
while(1)
{
scanf("%d",&a);
if(a==-1)
return ;
node *q=new node;/*申请一段空间,造出一个表尾*/
q->data=a;
q->nex=NULL;
p->nex=q;/*用来找到表尾*/
p=q;/*指向新的表尾*/
}
}
void output(node *head)
{
node *p;
p=head->nex;/*这里!!!!*/
while(p!=NULL)
{
printf("%d ",p->data);
p=p->nex;
}
return ;
}
int main()
{
node *a=new node;/*此处申请空间*/
a->nex=NULL;/*初始化*/
input(a);
output(a);
node *b=new node;
b->nex=NULL;
input(b);
output(b);
return 0;
}
单链表的插入和删除
插入: 在 第x位 后面插入y,找到第x个元素即可
删除: 删除第x位 ,所以要找到x-1,和x这两个元素,让(x-1)>next=(x)->next即可,这里面我用了do while()循环实现
#include<bits/stdc++.h>
using namespace std;
struct node
{
int data;
node *nex;
};
void input(node *head)
{
printf("INPUT\n");
node *p;
p=head;/*指向表头*/
int a;
while(1)
{
scanf("%d",&a);
if(a==-1)
return ;
node *q=new node;/*申请一段空间,造出一个表尾*/
q->data=a;
q->nex=NULL;
p->nex=q;/*用来找到表尾*/
p=q;/*指向新的表尾*/
}
}
void output(node *head)
{
node *p;
p=head->nex;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->nex;
}
printf("\n");
return ;
}
void insert_(node *head,int x,int y)
{
node *p;
int i=0;
p=head->nex;
while(p!=NULL)
{
i++;
if(i==x)/*遍历链表 ,直到 x这个位置*/
{
node *q=new node;
q->data=y;
q->nex=p->nex;/*为 y 造出新的空间,并且y的尾部指向x的尾部*/
p->nex=q;/*x的尾部指向y的头部*/
}/*穿针引线 ok*/
p=p->nex;
}
return ;
}
void delate(node *head,int x)
{
node *p;
int i=0;
p=head;
/*之所以用do while是为了可以删除第一个元素*/
do
{
i++;
if(i==x)
{
node *q=p->nex;/*跳过 因为还没有 执行p=p->nex
所以p指向的是x-1 , q->nex指向x+1 跳过x即可 */
p->nex=q->nex;
free(q);
break;
}
p=p->nex;
}while(p!=NULL);
return ;
}
int main()
{
node *a=new node;/*此处申请空间*/
a->nex=NULL;/*初始化*/
input(a);
output(a);
int x,y;
printf("在x为之后插入y,输入x y:\n");
scanf("%d%d",&x,&y);
insert_(a,x,y);
output(a);
printf("删除第x个元素 输入x:\n");
scanf("%d",&x);
delate(a,x);
output(a);
return 0;
}