编写程序,输入位序,删除单链表中该位序上的元素,并显示删除后的单链表,若删除不成功,输出0。 输入分两行: 第一行是若干正整数,最后以-1表示结尾(-1不算在序列内,不要处理)。所有数据之间用空格分隔。 第二行数据是删除位置 输出为:删除后的单链表
时间: 2024-10-20 09:19:05 浏览: 18
单链表中重复元素的删除
5星 · 资源好评率100%
要实现这个功能,你需要使用C++编写一个单链表结构,以及相关的插入、查找和删除操作。首先,我们定义一个节点类`ListNode`,包含一个值和指向下一个节点的指针:
```cpp
#include <iostream>
class ListNode {
public:
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
接下来,我们可以创建一个单链表类`SingleLinkedList`,并提供相应的方法:
```cpp
class SingleLinkedList {
private:
ListNode* head; // 链表头指针
public:
SingleLinkedList() : head(nullptr) {}
// 插入节点
void insertNode(int value) {
if (!head) {
head = new ListNode(value);
} else {
ListNode* current = head;
while (current->next != nullptr && current->next->val < value) {
current = current->next;
}
current->next = new ListNode(value);
}
}
// 查找节点
ListNode* findNode(int position) const {
if (!head) return nullptr;
ListNode* current = head;
for (int i = 0; i < position && current != nullptr; ++i, current = current->next) {
if (i == position - 1) return current; // 如果找到指定位置,返回该节点
}
return nullptr; // 没有找到指定位置,返回nullptr
}
// 删除节点(包括更新链表)
void deleteNodeIfFound(ListNode*& current, int position) {
if (position <= 0 || !current) return; // 检查是否合法删除位置
if (position == 1) { // 删除头节点
head = current->next;
} else {
for (int i = 1; i < position && current->next != nullptr; ++i, current = current->next) {
if (i == position - 2) {
current->next = current->next->next;
break;
}
}
}
}
// 打印链表
void printList() const {
ListNode* temp = head;
while (temp != nullptr) {
std::cout << temp->val << " ";
temp = temp->next;
}
std::cout << std::endl;
}
};
```
然后你可以按照以下步骤编写主程序来接受输入并进行操作:
```cpp
int main() {
int input;
std::cin >> input;
while (input != -1) {
SingleLinkedList list;
list.insertNode(input); // 插入元素
int deletePosition;
std::cin >> deletePosition;
ListNode* toDelete = list.findNode(deletePosition); // 查找节点
if (toDelete) {
list.deleteNodeIfFound(list.head, deletePosition); // 删除节点
list.printList(); // 打印删除后的链表
} else {
std::cout << "0\n"; // 删除失败,输出0
}
std::cin >> input; // 获取下个输入
}
return 0;
}
```
阅读全文