#include <stdio
.h
>
#include <stdlib
.h
>
typedef int ElemType;
typedef struct LNode{
ElemType
data;
struct LNode
*next;
}LNode,
*LinkList,
*p_LNode;
p_LNode CreateLinkList();
void DeleteNode(p_LNode head, ElemType key);
void TraverseLinkList(p_LNode head);
p_LNode ReverseLinkList(p_LNode head);
int main(){
printf(
"Create:element element ... 11111111(sign to end)\n");
p_LNode head
= (p_LNode)malloc(sizeof(LNode));
if(
!(head
->next
= CreateLinkList())){
getchar();
getchar();
printf(
"Program will be stopped.");
return 0;
}
printf(
"Create successfully.\n");
printf(
"The elements in the linklist you created is: ");
TraverseLinkList(head);
printf(
"Reverse the linklist.\n");
p_LNode node
= head;
while(node
->next) node
= node
->next;
if(
!(head
->next
&& head
->next
->next))
printf(
"Not nessesary to reverse.\n");
else {
ReverseLinkList(head
->next);
head
->next
= node;
printf(
"After reversing: ");
TraverseLinkList(head);
}
printf(
"Input the key element that you want to delete.\n");
ElemType key;
scanf(
"%d",
&key);
DeleteNode(head, key);
printf(
"After delete: ");
TraverseLinkList(head);
getchar();
getchar();
return 0;
}
p_LNode CreateLinkList(){
ElemType e;
scanf(
"%d",
&e);
if(
11111111 != e){
p_LNode node
= (p_LNode)malloc(sizeof(LNode));
node
->data = e;
node
->next
= CreateLinkList();
return node;
}
return NULL;
}
void TraverseLinkList(p_LNode head){
while(head
->next){
printf(
"%d ", head
->next
->data);
head
= head
->next;
}
printf(
"\n");
}
void DeleteNode(p_LNode head, ElemType key){
while(head
->next){
if(key
== head
->next
->data){
p_LNode node
= head
->next;
head
->next
= node
->next;
free(node);
}
head
= head
->next;
}
}
p_LNode ReverseLinkList(p_LNode preNode){
if(preNode
->next
->next)
ReverseLinkList(preNode
->next);
preNode
->next
->next
= preNode;
preNode
->next
= NULL;
}