题目描述
已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。要求:不得额外申请新的链结点
输入
输入长度n:6
输入数据:4 2 6 88 34 6
输出
2 4 6 88 34 6
样例输入
5
11 6 8 7 9
样例输出
6 11 8 7 9
分析:
此题,也是考察链表的基本知识。对链表的查找极其应用。
#include"stdio.h"
#include"string.h"
typedef struct a{
int data;
struct a *next;
}*LinkList,Node;
void CreatListTail(LinkList *L,int m)
{
LinkList p,r;
int i;
*L=(LinkList)malloc(sizeof(Node));
r=*L;
for(i=0;i<m;i++)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&(p->data));
r->next=p;
r=p;
}
r->next=NULL;
}
int main()
{
LinkList head,min,pre,P,top;
int n;
while(~scanf("%d",&n))
{
CreatListTail(&head,n);
min=head->next;
top=head->next->next;
pre=head;
P=head->next;
while(top!=NULL)
{
if(min->data>top->data)
{ // printf("min.data=%d\n",min->data);
pre=P;
min=top;
}
P=top;
top=top->next;
}
// printf("min.data=%d\n",min->data);
pre->next=min->next;
min->next=head->next;
head->next=min;
head=head->next;
while(head!=NULL)
{
printf("%d ",head->data);
head=head->next;
}
printf("\n");
}
}
该博客讨论如何在非空线性链表中找到数据域值最小的节点,并将其移动到链表的开头,而不使用额外的链结点。提供了输入输出示例及问题分析。

2235

被折叠的 条评论
为什么被折叠?



