#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
void CreateList(LinkList &l);//创建
void ShowList(LinkList &l);//输出链表
int CountList(LinkList &l);//计算结点数
int CountNodeAdd(LinkList &l);//计算元素和
int CountNodeMax(LinkList &l);//求最大元素
void ReverseList(LinkList &l);//链表逆置
void main()
{
LinkList L;
CreateList(L);
printf("元 素 为:");
ShowList(L);
printf("结点数为:%d\n",CountList(L));
printf("结点和为:%d\n",CountNodeAdd(L));
printf("最大元素为:%d\n",CountNodeMax(L));
ReverseList(L);
printf("逆置后为:");
ShowList(L);
}
void CreateList(LinkList &l)//创建链表
{
LinkList p,q;
q=l=(LinkList)malloc(sizeof(Lnode));
q->next=NULL;
puts("输入元素以'0'结束");
while(1)
{
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data);
if(p->data==0)
break;
p->next=q->next;
q->next=p;
q=p;
}
}
void ShowList(LinkList &l)//输出链表
{
LinkList p;
p=l;
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
puts("");
}
int CountList(LinkList &l)//求结点数
{
LinkList p;
int sum=0;
p=l;
while(p!=NULL)
{
p=p->next;
sum++;
}
return sum;
}
int CountNodeAdd(LinkList &l)//求元素和
{
LinkList p;
int sum=0;
p=l;
while(p->next!=NULL)
{
p=p->next;
sum+=p->data;
}
return sum;
}
int CountNodeMax(LinkList &l)//求最大元素
{
LinkList p;
int max=0;
p=l;
while(p->next!=NULL)
{
p=p->next;
if(p->data>max)
max=p->data;
}
return max;
}
void ReverseList(LinkList &l)//链表逆置
{
LinkList p,q,s;
s=p=q=l;
q=q->next;
p->next=NULL;
while(q!=NULL)
{
s=q->next;
q->next=p->next;
p->next=q;
q=s;
}
}