链表查找(线性表)

该博客讨论如何在非空线性链表中找到数据域值最小的节点,并将其移动到链表的开头,而不使用额外的链结点。提供了输入输出示例及问题分析。

题目描述

已知非空线性链表由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");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值