请写一算法,将该链表中数据域值最大的那个点移到链表的最后面。(C和C++)

【问题描述】已知非空线性链表第1个链结点指针为list,链结点构造为structnode{datatypedata;node*link;};请写一算法,将该链表中数据域值... 【问题描述】
已知非空线性链表第1个链结点指针为list,链结点构造为
struct node{
datatype data;
node *link;
};
请写一算法,将该链表中数据域值最大的那个点移到链表的最后面。(注意:要求先写出算法的解题思路,然后再写出算法)
【输入形式】
输入为一个整数序列(个数<100),整数(int)之间以空格隔开,序列以回车结尾。
【输出形式】
输出为移动后的整数序列,整数之间以空格隔开,序列以回车结尾。
【样例输入】
3 12 4 9 5 1
【样例输出】
3 4 9 5 1 12
【样例说明】
将序列中最大的数字12移动到序列最后。
展开
 我来答
听不清啊
高粉答主

2019-09-26 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

算法:

先创建一个链表;

再找出链表中最大数字所在的结点(并保持记录最大结点的前趋结点t);

利用t将最大最大结点从原链表中删除,再将最大结点链接到原来的表尾。

#include<stdio.h>

#include<string.h>

typedef struct node

{ int data;

  struct node* link;

} aaa;

aaa * creat()

{ aaa *h,*p,*q;

  int x;

  char c,k=1;

  p=h=(aaa*)malloc(sizeof(aaa));

  do

  { scanf("%d%c",&x,&c);

    q=(aaa*)malloc(sizeof(aaa));

    q->data=x;

    p->link=q;

    p=q;

  }

  while(c!='\n');

  p->link=NULL;

  return h;

}

void movemax(aaa *p)

{ aaa *t=p,*max=p->link,*q=p;

  while(p->link)

  { p=p->link;

    if(p->data>max->data)

    { t=q;

      max=p;

    }

    q=p;

  }

  t->link=max->link;;

  p->link=max;

  max->link=NULL;

}

void prt(aaa *p)

{ while(p=p->link)

  { printf("%d ",p->data);

  }

  printf("\n");

}

int main()

{ aaa *h;

  h=creat();

  movemax(h);

  prt(h);

  return 0;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式