/*
author:Li Shihua
20:00 Mar.3 2012 All Rights Reserved.
*/
#include <stdio.h>
#include <malloc.h>
typedef struct node{
int number;
struct node *next;
}PLINKEDLIST,*LPLINKEDLIST;
LPLINKEDLIST CreateTail() //尾插法创建链表
{
LPLINKEDLIST p1=NULL;
LPLINKEDLIST p2=NULL;
LPLINKEDLIST head=NULL;
head = (LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));
p1=head;
while(scanf("%d",&p1->number)==1)
{
if(p1->number==0) //当输入元素为0时结束创建。
break;
p2=(LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));
p1->next=p2;
p1=p1->next;
p2=NULL;
}
p1->next=NULL;
return head;
}
LPLINKEDLIST CreateHead() //头插法创建链表
{
LPLINKEDLIST p1=NULL;
LPLINKEDLIST head=NULL;
do
{
if(head!=NULL)
{
if(head->number==0) //当输入元素为0时结束创建。
break;
}
p1 = (LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));
p1->next=head;
head = p1;
p1=NULL;
}while(scanf("%d",&head->number)==1);
return head;
}
void PrintLinkedList(LPLINKEDLIST head) //打印链表中的元素
{
LPLINKEDLIST p=head;
if(p==NULL)
{
printf("链表为空!\n");
}
while(p!=NULL)
{
printf("%d ",p->number);
p=p->next;
}
printf("\n");
}
LPLINKEDLIST ConverseLinkedList(LPLINKEDLIST head) //输入为一个单链表,输出为这个链表的逆至。
{
LPLINKEDLIST p1=head;
LPLINKEDLIST p2=NULL;
LPLINKEDLIST P3=NULL;
if(p1==NULL)
{
printf("链表为空!\n");
}
p2=p1->next;
while(p2!=NULL)
{
P3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = P3;
}
head->next=NULL;
head=p1;
return head;
}
int main()
{
printf("请输入链表元素:\n");
LPLINKEDLIST head1=CreateHead();
PrintLinkedList(head1);
LPLINKEDLIST head2=ConverseLinkedList(head1);
PrintLinkedList(head2);
return 0;
}
待续。。。