【问题描述】在单链表L中找到最大的元素并将其删除显示删除后的单链表#includestdlibh#includeiostreamusing namespace std; #define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType; typedef struct LNodeElemTyp
参考代码:
#include<stdlib.h>
#include
using namespace std;
#define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType;
typedef struct LNode { ElemType data;//结点的数据域 struct LNode *next;//结点的指针域 }LNode,*LinkList;//LinkList为指向结构体LNode的指针类型
Status InitList_L(LinkList &L){ //构造一个空的单链表L L=new LNode;//生成新结点作为头结点,用头指针L指向头结点 L->next=NULL;//头结点的指针域置空 return OK; }
Status ListInsert_L(LinkList &L, int i, ElemType e){ //在单链表L中第i个位置之前插入元素e LNode *p=L; int j=0; while(p && j<i-1){ p=p->next; j++; } if(!p || j>i-1) return ERROR;//i小于1或大于表长+1,返回错误信息
LNode *s=new LNode;//生成新结点
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L, int i, ElemType &e){ //在单链表L中删除第i个元素,并由e返回其值 LNode *p=L; int j=0; while(p->next && j<i-1){ p=p->next; j++; } if(!(p->next) || j>i-1) return ERROR;//删除位置不合理,返回错误信息
LNode *q=p->next;
e=q->data;
p->next=q->next;
delete q;
return OK;
}
void PrintList_L(LinkList L){
//输出单链表L
LNode *p=L->next;
while(p){
cout<
void FindMaxAndDelete(LinkList &L){ //找到单链表L中最大的元素,并将其删除 LNode *p=L->next; LNode *pre=L; LNode *maxNode=p; ElemType maxData=p->data; while(p){ if(p->data > maxData){ maxData=p->data; maxNode=p; pre->next=p->next;//保持前后关系 } pre=p; p=p->next; } if(maxNode == L->next) L->next=maxNode->next;//特殊情况处理:删除的是第一个节点 delete maxNode; }
int main()
{
LinkList L;
InitList_L(L);
int n;
cout<<"请输入元素个数n:";
cin>>n;
cout<<"请输入"<<n<<"个元素:";
for(int i=1;i<=n;i++){
ElemType e;
cin>>e;
ListInsert_L(L, i, e);
}
cout<<"删除前单链表L中的元素为:";
PrintList_L(L);
FindMaxAndDelete(L);
cout<<"删除单链表L中最大元素后,单链表L中的元素为:";
PrintList_L(L);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bH2f 著作权归作者所有。请勿转载和采集!