链表查找(线性表)

题目描述

已知非空线性链表由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");
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43506138/article/details/85009914