#include <stdio.h>
#include <stdlib.h>
typedef struct _chain{
int nData;
struct _chain *next;
}chain;
void creat_chain(chain *pHead,int s[],int len)
{
chain *p = pHead;
for (int i = 0; i < len; i++)
{
p->next = (chain *)malloc(sizeof(chain));
p = p->next;
p->nData = s[i];
pHead->nData++;
}
p->next = NULL;//last to NULL
}
void print_chain(const chain *head)
{
chain *p = head->next;
while (p) {
printf("%d->",p->nData);
p = p->next;
}
printf("END/n");
printf("共%d/n",head->nData);
}
void move_least_to_head(chain *head)
{
chain *p = head->next;//first of chain
chain *prevofp = head;
chain *prevofleast = head;
chain *least = p;
int min = p->nData;
while (p) {
if (p->nData < min) {
min = p->nData;
prevofleast = prevofp;
least = p;
}
prevofp = p;
p = p->next;
}
if(prevofleast == head) return;
prevofleast->next = least->next;
least->next = head->next;
head->next = least;
}
void free_chain(chain *head)
{
chain *p,*pTemp;
p = head->next;
while (p) {
pTemp = p->next;
free(p);
p = pTemp;
}
}
void main()
{
int s[] = {12,10,3,7,11,9,5,7,2,1,88};
int len = sizeof(s)/sizeof(s[0]);
chain head;
head.nData = 0;
creat_chain(&head,s,len);
print_chain(&head);
move_least_to_head(&head);
print_chain(&head);
free_chain(&head);
getchar();
}