【问题描述】
在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素。
【输入形式】
循环输入若干个整数,以字母结束输入,建立带头结点的单链表。
【输出形式】
输出最大值与最后一个元素交换后的单链表元素。
【样例输入1】
10 8 2 55 6 7 40 a
【样例输出1】
10 8 2 40 6 7 55
【样例输入2】
-5 -12 -8 -1 -10 -3e
【样例输出2】
-5 -12 -8 -3 -10 -1
【样例说明】
【评分标准】
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateListTail( LinkList *L)
{
LinkList p,q;
ElemType e;//定义整形变量
p=*L=(LinkList)malloc(sizeof(LNode));
while(scanf("%d",&e)==1)
{
q=(LNode*)malloc(sizeof(LNode));//申请空间
q->data=e;//输入值
p->next=q;//连接
p=q;//移动指针
}
p->next=NULL;
}
void PrintList(LinkList L)
{
LinkList p=L->next;//因为是带头结点的单链表 所以先定位到第一个元素
while(p)
{
printf("%d ",p->data);
p=p->next;//通过循环打印 输出单链表
}
printf("\n");
}
void MaxLastSwap(LinkList L)
{
int max;
LinkList p=L->next,q,s=L;
max=p->data;
q=p;
while(p)
{
if(max<p->data)
{
max=p->data;
q=p;//q是为了表示最大值所在的位置
}
p=p->next;
}
while(s->next)
{
s=s->next;//通过循环找到链表的最后一个元素
}
q->data=s->data;
s->data=max;//最大值与最后一个元素的更换
return ;
}
int main()
{
LinkList L;
CreateListTail(&L);//创建带头结点的单链表
MaxLastSwap(L);//找出最大值 并更换位置
PrintList(L);
return 0;
}