单链表原地逆置
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 10010
#define ElemType int
typedef struct LNode
{
ElemType data
;
LNode
*next
;
}LNode
,*LinkList
;
LinkList
initLinkList(int num
){
LNode
* head
=(LNode
*)malloc(sizeof(LNode
));
LinkList p
=head
;
p
->next
=NULL;
int elem
;
while(num
--){
printf("输入:");
scanf("%d",&elem
);
LNode
* L
=(LNode
*)malloc(sizeof(LNode
));
L
->data
=elem
;
L
->next
=NULL;
p
->next
=L
;
p
=p
->next
;
}
return head
;
}
void ReverseLinkList(LinkList
&l
){
LinkList head
=l
;
LinkList p
=head
->next
;
LinkList pnx
,pr
;
head
->next
=NULL;
if(!p
||!(p
->next
)){
printf("该链表为空或者只有一个结点,不需要逆置!\n");
}else{
pr
=NULL;
pnx
=NULL;
}
while(p
){
pnx
=p
->next
;
p
->next
=pr
;
pr
=p
;
p
=pnx
;
}
head
->next
=pr
;
}
void display(LinkList p
){
LinkList pp
=p
->next
;
while(pp
){
int data
=pp
->data
;
printf("%d ",data
);
pp
=pp
->next
;
}
}
int main(){
printf("输入元素个数:");
int num
;
scanf("%d",&num
);
printf("初始化链表\n");
LinkList LL1
=initLinkList(num
);
printf("\n打印链表\n");
display(LL1
);
printf("\n单链表逆置\n");
ReverseLinkList(LL1
);
display(LL1
);
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-16759.html