你说的那个是逆序建立n个节点的链表,建完头结点后由于链表中没有其他节点就把头结点的next置为空,这一点如果不明白的话去看链表那一章,有介绍!!!
创新互联成立与2013年,先为宝应等服务建站,宝应等地企业,进行企业商务咨询服务。为宝应企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
之后从后往前建立链表!!刚开始是L-next =NULL
要注意p是每次新建的节点,这样从后往前以此建立链表,只要明白p是每次新建的节点,和从后往前建立,就会明白的!!给你花了张图!!
在单
链表
A中删除所有和
单链表
B中元素相同的结点
#include
"stdafx.h"
#include
stdio.h
#include
malloc.h
#define
SIZE
sizeof(struct
node)
struct
node{
int
data;
struct
node
*next;
};
void
init(struct
node
*LC){
int
n;
struct
node
*Str,*p;
p=(struct
node
*)malloc(SIZE);
Str=LC;
printf("请输入链表A,以小于零的数结束输入:\n");
scanf("%d",n);
while(n=0){
p-data=n;
Str-next=p;
Str=p;
p=(struct
node
*)malloc(SIZE);
scanf("%d",n);
Str-next=NULL;
}
printf("您输入的序列的是:\n");
for
(Str=LC-next;Str!=NULL;){
printf("%d
",Str-data);
Str=Str-next;
}
printf("\n");
}
void
delet_LA(struct
node
*LA,struct
node
*pa){
struct
node
*p;
struct
node
*q;
p=LA;
q=p;
for
(p;p!=pa;){
q=p;
p=p-next;
}
q-next=pa-next;
}
void
delete_same(struct
node
*LA,struct
node
*LB){
struct
node
*pa,*pb;
pa=LA-next;
pb=LB-next;
for
(pb;pb!=NULL;){
for
(pa;pa!=NULL;){
if
(pb-data==pa-data){
delet_LA(LA,pa);
pa=LA-next;
}
else{
pa=pa-next;
}
}
pb=pb-next;
pa=LA-next;
}
printf("处理后的单链表A为:\n");
for
(pa=LA-next;pa!=NULL;){
printf("%d
",pa-data);
pa=pa-next;
}
}
void
main(){
struct
node
*LA;
struct
node
*LB;
LA=(struct
node
*)malloc(SIZE);
if(LA!=NULL)
LA-data=-1;
LB=(struct
node
*)malloc(SIZE);
if(LB!=NULL)
LB-data=-1;
init(LA);
init(LB);
delete_same(LA,LB);
}
所谓初始化链表就是把链表的数据置空,也就是所有的数据,指针都为null
举个单链表的例子
该算法的结果将单链表head置为空表,只需要将头节点的指针置为null即可。算法实现如下
void setnull(struct Lnode *head)
{
head-next=NULL;
}
双链表和循环链表依次类推·