(一)利用结构体创建链表
注意typedef的使用
在本代码中LNode*s 和ListList s 是等价的
typedef struct LNode
{int data;
struct LNode*next;
} LNode,*LinkList;
(二)链表的初始化操作
注意此处使用到了二级指针
void InitList(LinkList *s)
{*s=(LinkList)malloc(sizeof(LNode));
if(*s==NULL)
return ;
(*s)->next=NULL;
}
(三)利用尾插法创建一个单链表
注意scanf的使用
void ListInsert(LinkList*L,int a)//尾插法
{LNode*p=*L;
LNode*s=NULL;
int i=0;
int x;
for(i=0;i<a;i++)
{scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
if(s==NULL) return ;
s->data=x;
s->next=p->next;
p->next=s;
p=s;
}
}
(四)核心代码 删除链表中最小的int 型数据
注意pre premin 指针的使用
void Deletmin(LNode *L)
{LNode*min=L->next;
LNode*p=min->next;
LNode*minpre=L;
LNode*pre=L->next;
while(p!=NULL)
{
if(min->data>p->data)
{min=p;
minpre=pre;
}
pre=p;
p=p->next;
}
LNode*q=minpre->next;
minpre->next=q->next;
free(q);
}
(五)遍历该单链表
void printlist(LNode*s)
{LNode*p=s->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
(六)完整代码
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{int data;
struct LNode*next;
} LNode,*LinkList;
void InitList(LinkList *s)
{*s=(LinkList)malloc(sizeof(LNode));
if(*s==NULL)
return ;
(*s)->next=NULL;
}
void ListInsert(LinkList*L,int a)//尾插法
{LNode*p=*L;
LNode*s=NULL;
int i=0;
int x;
for(i=0;i<a;i++)
{scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
if(s==NULL) return ;
s->data=x;
s->next=p->next;
p->next=s;
p=s;
}
}
void printlist(LNode*s)
{LNode*p=s->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
void Deletmin(LNode *L)
{LNode*min=L->next;
LNode*p=min->next;
LNode*minpre=L;
LNode*pre=L->next;
while(p!=NULL)
{
if(min->data>p->data)
{min=p;
minpre=pre;
}
pre=p;
p=p->next;
}
LNode*q=minpre->next;
minpre->next=q->next;
free(q);
}
int main() {
LNode *L;
InitList(&L);
int a=0;
printf("行输入元素个数");
scanf("%d",&a);
printf("请输入%d个int型数据\n",a);
ListInsert(&L,a);
//printlist(L);
Deletmin(L);
printf("\n删除最小值之后\n");
printlist(L);
return 0;
}