链表最值处理操作

允我心安 提交于 2020-02-24 15:48:16

链表中最小值移到表头

#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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!