定义单链表类,创建带头结点的单链表(节点类型为整型数据),要求包含以下成员函数: 头插法创建单链表(利用构造函数实现) 尾插法创建单链表(重载构造函数实现) 链表的遍历 按值删除一个节点 按位置删除一个节点 判断该链表是否递增有序 链表的析构
时间: 2023-04-15 08:02:33 浏览: 227
定义单链表类,创建带头结点的单链表(节点类型为整型数据),要求包含以下成员函数:
1. 头插法创建单链表(利用构造函数实现)
2. 尾插法创建单链表(重载构造函数实现)
3. 链表的遍历
4. 按值删除一个节点
5. 按位置删除一个节点
6. 判断该链表是否递增有序
7. 链表的析构
具体实现如下:
```c++
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int d = , Node* n = NULL) : data(d), next(n) {}
};
class LinkedList {
private:
Node* head;
public:
LinkedList() {
head = new Node();
}
LinkedList(int arr[], int n) {
head = new Node();
Node* p = head;
for (int i = ; i < n; i++) {
p->next = new Node(arr[i]);
p = p->next;
}
}
~LinkedList() {
Node* p = head;
while (p) {
Node* q = p;
p = p->next;
delete q;
}
}
void insertHead(int x) {
head->next = new Node(x, head->next);
}
void insertTail(int x) {
Node* p = head;
while (p->next) {
p = p->next;
}
p->next = new Node(x);
}
void traverse() {
Node* p = head->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void remove(int x) {
Node* p = head;
while (p->next && p->next->data != x) {
p = p->next;
}
if (p->next) {
Node* q = p->next;
p->next = q->next;
delete q;
}
}
void removeAt(int i) {
Node* p = head;
int j = ;
while (p->next && j < i) {
p = p->next;
j++;
}
if (p->next) {
Node* q = p->next;
p->next = q->next;
delete q;
}
}
bool isSorted() {
Node* p = head->next;
while (p && p->next) {
if (p->data > p->next->data) {
return false;
}
p = p->next;
}
return true;
}
};
int main() {
int arr[] = { 1, 3, 5, 7, 9 };
LinkedList list1(arr, 5);
list1.traverse(); // 1 3 5 7 9
LinkedList list2;
list2.insertHead(9);
list2.insertHead(7);
list2.insertHead(5);
list2.insertHead(3);
list2.insertHead(1);
list2.traverse(); // 1 3 5 7 9
list1.remove(5);
list1.traverse(); // 1 3 7 9
list2.removeAt(2);
list2.traverse(); // 1 3 7 9
cout << list1.isSorted() << endl; // 1
cout << list2.isSorted() << endl; // 1
return ;
}
```
阅读全文