删除单链表中的一个最小值节点

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

typedef struct LNode{
  int data;
  struct LNode *next;
}LNode;

void create(LNode *&A,int n) //创建链表
{
    int i,a[30];
    LNode *s,*r;
    A=(LNode *)malloc(sizeof(LNode));
    A->next=NULL;
    r=A;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        s=(LNode *)malloc(sizeof(LNode));
        s->data=a[i];
        r->next=s;
        r=r->next;
    }
    r->next=NULL;
}
void print(LNode *A) //输出链表
{
   LNode *p;
   p=A;
   while(p->next!=NULL)
   {
       printf("%d ",p->next->data);
       p=p->next;
   }
   printf("\n");
}

void delete_min(LNode *&A)
{
    LNode *p,*minp,*s;
    p=A->next;
    minp=A;
    while(p->next!=NULL)
    {
        if(p->next->data<minp->next->data)
        {
            minp=p;
            p=p->next;
        }
        else p=p->next;
    }
    s=minp->next;
    minp->next=minp->next->next;
    free(s);
}
int main()
{
    LNode *A;
    int n;
    scanf("%d",&n);
    create(A,n);
    delete_min(A);
    print(A);
    return 0;
}
 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页