链表中最小值移到表头
#include<bits/stdc++.h>
using namespace std;
struct LNode
{
int data;
LNode *next;
};
void creathead(LNode *&L,int a[],int n)///尾插法
{
LNode *r,*s;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(int i=0; i<n; i++)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
void solve(LNode *&L)
{
LNode *p,*minn,*pre,*minpre;
p=L->next;
pre=L;
minn=p;
while(p!=NULL)
{
if(p->data<minn->data)
{
minn=p;
minpre=pre;
}
pre=p;
p=p->next;
}
if(minn!=L->next)
{
minpre->next=minn->next;
minn->next=L->next;
L->next=minn;
}
}
int main()
{
LNode *L,*B;
int n,c[10000];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&c[i]);
creathead(L,c,n);
solve(L);
while(L->next!=NULL)
{
printf("%d ",L->next->data);
L=L->next;
}
printf("\n");
return 0;
}
在一个无序链表中找出最小值节点
并输出,若该节点值为奇数,则与其后继交换
若为偶数则将其后继删除;
#include<bits/stdc++.h>
using namespace std;
struct LNode
{
int data;
LNode *next;
};
void creathead(LNode *&L,int a[],int n)///尾插法
{
LNode *r,*s;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(int i=0; i<n; i++)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
void solve(LNode *&L)
{
LNode *p,*minn,*pre,*minpre,*q;
p=L->next;
pre=L;
minn=p;
while(p!=NULL)
{
if(p->data<minn->data)
{
minn=p;
minpre=pre;
}
pre=p;
p=p->next;
}
printf("最小值为:%d\n",minn->data);
if(minn->data%2)
{
q=minn->next;
minn->next=q->next;
q->next=minn;
minpre->next=q;
}
else
{
q=minn->next;
minn->next=q->next;
free(q);
}
}
int main()
{
LNode *L,*B;
int n,c[10000];
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&c[i]);
creathead(L,c,n);
solve(L);
while(L->next!=NULL)
{
printf("%d ",L->next->data);
L=L->next;
}
printf("\n");
return 0;
}