1、从键盘输入20个整数,产生带表头的单链表,并输出结点值; 2、从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则显示“找不到”; 3、从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插入在对应位置上,输出单链表所有结点值,观察输出结果;4、从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果;环境为Visual。
时间: 2024-02-26 18:56:28 浏览: 19
好的,以下是Visual C++的代码实现:
```cpp
#include <iostream>
using namespace std;
// 定义单链表结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 产生带表头的单链表
ListNode* createList() {
ListNode* head = new ListNode(-1); // 表头结点
ListNode* p = head;
for (int i = 0; i < 20; ++i) {
int num;
cin >> num;
ListNode* node = new ListNode(num);
p->next = node;
p = p->next;
}
return head;
}
// 输出单链表结点值
void printList(ListNode* head) {
ListNode* p = head->next;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
}
// 在单链表中查找结点
bool searchList(ListNode* head, int val) {
ListNode* p = head->next;
while (p != nullptr) {
if (p->val == val) {
return true;
}
p = p->next;
}
return false;
}
// 在指定位置插入结点
void insertList(ListNode* head, int pos, int val) {
ListNode* p = head;
for (int i = 0; i < pos && p != nullptr; ++i) {
p = p->next;
}
if (p == nullptr) {
return;
}
ListNode* node = new ListNode(val);
node->next = p->next;
p->next = node;
}
// 删除指定位置结点
void deleteList(ListNode* head, int pos) {
ListNode* p = head;
for (int i = 0; i < pos && p->next != nullptr; ++i) {
p = p->next;
}
if (p->next == nullptr) {
return;
}
ListNode* temp = p->next;
p->next = temp->next;
delete temp;
}
int main() {
// 产生带表头的单链表
ListNode* head = createList();
// 输出单链表结点值
printList(head);
// 在单链表中查找结点
int val;
cin >> val;
if (searchList(head, val)) {
cout << "找到了" << endl;
} else {
cout << "找不到" << endl;
}
// 在指定位置插入结点
int pos, num;
cin >> pos >> num;
insertList(head, pos, num);
printList(head);
// 删除指定位置结点
int delPos;
cin >> delPos;
deleteList(head, delPos);
printList(head);
return 0;
}
```
希望能够解答您的问题。
阅读全文