【问题描述】在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素。【输入形式】循环输入若干个整数,以字母结束输入,建立带头结点的单链表。【输出形式】输出最

【问题描述】

在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素。

【输入形式】

循环输入若干个整数,以字母结束输入,建立带头结点的单链表。
【输出形式】

输出最大值与最后一个元素交换后的单链表元素。
【样例输入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;
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值