链表最值处理操作

链表中最小值移到表头

#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;
}
发布了76 篇原创文章 · 获赞 5 · 访问量 6329

猜你喜欢

转载自blog.csdn.net/AYSXY/article/details/104476873