删除有头节点的单链表中的最小值的结点
#include <iostream>
using namespace std;
typedef struct node {
int data;
struct node *next;
} LNode;
void Del_minNode(LNode *L);
LNode *CreateLink(const int data[], int n);
void PrtLink(LNode *L);
int main() {
int n = 6;
int data[n];
for (int i = 0; i < n; ++i) {
cin >> data[i];
}
LNode *L;
L = CreateLink(data, 6);
PrtLink(L);
Del_minNode(L);
PrtLink(L);
return 0;
}
LNode *CreateLink(const int data[], int n) {
auto head = new LNode;
auto L = head;
auto p = head;
for (int i = 0; i < n; ++i) {
auto newNode = new LNode;
newNode->data = data[i];
p->next = newNode;
p = p->next;
p->next = nullptr;
}
return L;
}
void Del_minNode(LNode *L) {
if (L->next != nullptr) {
auto p = L->next;
auto p_min = L->next;
auto min = L->next;
if (p->next == nullptr) {
delete (p);
L->next = nullptr;
} else {
while (p->next != nullptr) {
if (min->data > p->next->data) {
min = p->next;
p_min = p;
}
p = p->next;
}
p_min->next = min->next;
delete (min);
}
} else {
cout << "This link is empty !!" << endl;
}
}
void PrtLink(LNode *L) {
auto p = L;
while (p->next != nullptr) {
cout << p->next->data<< " ";
p = p->next;
}
cout << endl;
}