#include<stdio.h>
#include<stdlib.h>
结构体定义
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,LinkList;
尾插法建表
void createR(LNode *&L,int n)
{
LNode *r,*s;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;//建立头指针
r=L;//r始终指向最后一结点
for(int i=0;i<n;++i)
{
s=(LNode*)malloc(sizeof(LNode));//s始终指向新节点
scanf("%d",&s->data);
r->next=s;//将s连接到链表上
r=r->next;//尾指针后移
}
r->next=NULL;
}
输出链表
void show(LNode *L)
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
找出最小值结点,如果最小值是奇数,删除该节点
void mini(LNode *L)
{
LNode *p,*q,*pre,*min;
//p用于遍历,,q为当前结点的下一个节点用于比较
//min指向最小值结点,pre指向最小值的前驱节点
p=L->next;
pre=L;
min=p;
while(p!=NULL)
{
q=p->next;
if(q!=NULL&&q->data<p->data)//移动min指针
{
min=q;
pre=p;
}
p=p->next; //遍历下一个
if(q==NULL)//此时p来到最后一个节点(已经过比较)
continue;//退出循环
}
printf("最小值是%d\n",min->data);
if(min->data%2!=0)
{
if(min->next==NULL)//min是最后一个节点
{
pre->next=NULL;
free(min);
}
else//min有后继节点
{
pre->next=min->next;
free(min);
}
}
}
应用
void main()
{
LinkList *L;
int count;
printf("请输入结点个数:");
scanf("%d",&count);
createR(L,count);
show(L);
mini(L);
printf("判断之后的链表为:");
show(L);
}