参考代码:

#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<data<<" "; p=p->next; } cout<<endl; }

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;

}

【问题描述】在单链表L中找到最大的元素并将其删除显示删除后的单链表#includestdlibh#includeiostreamusing namespace std; #define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType; typedef struct LNodeElemTyp

原文地址: https://www.cveoy.top/t/topic/bH2f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录