#include<stdio.h>
#include<stdlib.h>
struct Node//定义链表的结点类型
{
int data;
struct Node *next;
} ;
typedef struct Node LNode;
typedef struct Node * LinkList;
void CreateTailList (LinkList L,int n);
void OutputList(LinkList L); //输出带头结点的单链表
void DestroyList(LinkList L); //销毁带头结点的单链表
int MaxList(LinkList L); //求带头结点的单链表最大值
int main()
{
LinkList head; //定义一个LinkList 型的变量head
int n;
if( ( head = (LNode *) malloc( sizeof(LNode) ) ) == NULL)
{
printf("申请空间失败!");
exit(0);
}
head ->next=NULL; //在函数体外创建单链表的头结点head
scanf("%d",&n);
CreateTailList ( head,n); //用尾插法输入数据创建单链表
//OutputList(head); //输出以head为头的链表各结点的值
printf("max=%d\n", MaxList(head) );
DestroyList (head); //销毁以head为头的链表各结点
}
void CreateTailList(LinkList L,int n)
{
int i;
LinkList p1,p2;
p1=L;
for (i=0;i<n;i++)
{
if((p2=(LinkList)malloc(sizeof(LNode)))==NULL)
{
printf("不能成功分配储存空间。\n");
exit(1);
}
scanf("%d",&p2->data);
p2->next=NULL;
p1->next=p2;
p1=p2;
}
}
void OutputList(LinkList head)
{
LinkList p1=head->next;
while(p1)
{
printf("%d\t",p1->data);
p1=p1->next;
}
}
/**********定义DestroyList()函数**********/
void DestroyList (LinkList head)
{
/********** Begin **********/
LinkList p1,p2;
p1=head;
while (p1){
p2=p1->next;
free(p1);
p1=p2;
}
/********** End **********/
}
/**********定义MaxList ()函数**********/
int MaxList(LinkList L)
{
/********** Begin **********/
LinkList p1=L->next;
int max=p1->data;
while (p1)
{
if(p1->data>max)max=p1->data;
p1=p1->next;
}
return max;
/********** End **********/
}