题目
- 设有一个由正整数组成的无序单链表,实现以下功能
- 1、找出最小的结点,并打印
- 2、若该数值为奇数,则将其与直接后继结点的数值交换
- 3、若该数值为偶数,则将其直接后继结点删除
代码
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void createLinkList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
LNode *p,*r=L;
ElemType e;
cin>>e;
while(e!=999){
p=(LNode *)malloc(sizeof(LNode));
p->data=e;
r->next=p;
r=p;
cin>>e;
}
r->next=NULL;
}
void dispLinkList(LinkList L){
if(L==NULL)
return;
LNode *p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void getMinValue(LinkList &L){
if(L==NULL)
return;
LNode *min=L->next,*p=min->next;
while(p){
if(p->data<min->data){
min=p;
}
p=p->next;
}
if(min->data%2==1){
if(min->next!=NULL){
int tem = min->data;
min->data=min->next->data;
min->next->data=tem;
}else{
cout<<"没有后继结点,无法交换!";
}
}else{
if(min->next!=NULL){
LNode *q=min->next;
min->next=q->next;
free(q);
}else{
cout<<"没有后继结点!无法删除!";
}
}
}
int main() {
LinkList L;
createLinkList(L);
dispLinkList(L);
getMinValue(L);
dispLinkList(L);
return 0;
}
运行效果