
#include
using namespace std;
struct Node {
int data;
Node* next;
}; //类构造
class Linklist {
public:
int LinkList()
{
first = new Node;
first->next = nullptr;
}; //构造函数
void Linklist1(int a[], int n); //头插法
void Linklist2(int a[], int n); //尾插法
void PrintList(); //链表遍历
void Delete1(int x); //按值删除
void Delete2(int x); //按位置删除
int d(); //判断是否递增
Linklist(); //析构函数
private:
Node* first;
};
void Linklist::Linklist1(int a[], int n) {
first = new Node;
first->next = nullptr;
Node* s = nullptr;
for (int i = 0;i < n;i++) {
s = new Node;
s->next = first->next;
s->data = a[i];
first->next = s;
}
}
void Linklist::Linklist2(int a[], int n) {
first = new Node;
first->next = nullptr;
Node* r = first, * s = nullptr;
for (int i = 0;i < n;i++) {
s = new Node;
s->data = a[i];
r->next = s;
r = s;
}
r->next = nullptr;
}
void Linklist::PrintList() {
Node* p = first->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void Linklist::Delete1(int x) {
Node* p = first, * q = nullptr;
while (p->next != nullptr)
{
if (p->next->data == x)
{
q = p->next;
p->next = q->next;
delete q;
}
p = p->next;
}
}
void Linklist::Delete2(int i) {
Node* p = first, * q = nullptr;
int count = 0, x;
if (i <= 0) throw"error";
while (p != nullptr && count < i - 1) {
p = p->next;
count++;
}
if (p == nullptr || p->next == nullptr)
cout<<"error"<<endl;
else
{
q = p->next; x = p->data;
p->next = q->next;
delete q;
}
}
int Linklist::d(){
Node* p=first;
while (p != nullptr) {
if (p->next->data > p->data)
p = p->next;
else
return 0;
}
return 1;
}
Linklist::Linklist() {
Node* p = first;
while (p != nullptr) {
first->next;
delete p;
p = first;
}
}
int main() {
int i = 0, x, a[100],k;
Linklist ListA, ListB;
while (1) {
cin >> x;
if (x != 0) {
a[i] = x;i++; }
else break;
}
cin >> k;
ListA.Linklist2(a, i);
ListB.Linklist1(a, i);
ListA.PrintList();
ListB.PrintList();
ListA.Delete1(k);//最后一个数无法进行删除
ListA.PrintList();
ListA.Delete2(0);这一行和后面的代码控制台都没有任何反馈
if (ListA.d()) cout << "Yes" << endl;
else cout << "No" << endl;
}
结果不对具体是什么现象啊。也不知道你的测试数据
Delete2函数中,if (i <= 0) throw"error"; 所以Delete2(0)自然没有反馈了啊