请按尾插法创建单链表,并删除指定位置的元素,输出删除完成后的链表。操作完成后释放单链表。 输入 输入包括三行 第一行输入单链表的长度 第二行输入单链表的元素 第三行输入要删除节点的位置 输出 输出删除完成后的单链表,每个输出之后空一格。 如果删除失败直接输出0
时间: 2024-09-18 07:16:40 浏览: 47
在编程中,使用尾插法创建单链表并删除指定位置的元素通常涉及到以下几个步骤:
1. **初始化**:首先,你需要定义一个`Node`结构体表示链表中的节点,包含一个数据域`data`和一个指向下一个节点的指针`next`。
```cpp
struct Node {
int data;
Node* next;
};
```
2. **创建链表**:给定链表长度,你可以从头开始通过循环逐个插入元素到链表的尾部。
```cpp
Node* createList(int length) {
Node* head = new Node{0, nullptr};
Node* tail = head;
for (int i = 1; i <= length; ++i) {
Node* newNode = new Node{i, nullptr};
tail->next = newNode;
tail = newNode;
}
return head;
}
```
3. **删除指定位置的节点**:找到需要删除的位置,然后更新前面节点的`next`指针指向需要删除节点的下一个节点。注意,这里是从1开始计数的,所以实际删除位置比用户输入少1。
```cpp
void deleteNode(Node*& head, int position) {
if (position == 1) {
if (!head) {
// 如果链表为空,返回错误
cout << "0\n";
return;
}
Node* temp = head;
head = head->next;
delete temp;
return;
}
Node* current = head;
for (int i = 1; i < position && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr) {
// 删除失败,输出错误
cout << "0\n";
return;
}
Node* temp = current->next;
current->next = temp->next;
delete temp;
}
```
4. **输出链表**:删除节点后,可以遍历链表并打印结果,直到链表结束。
```cpp
void printList(Node* head) {
while (head) {
cout << head->data << " ";
head = head->next;
}
cout << "\n";
}
// 主函数
int main() {
int length;
cin >> length;
Node* list = createList(length);
int position;
cin >> position;
deleteNode(list, position);
printList(list);
// 链表结束后手动释放内存
Node* curr = list;
while (curr) {
Node* temp = curr;
curr = curr->next;
delete temp;
}
return 0;
}
```
运行这个程序后,它会接收用户输入的链表长度、元素值以及删除位置,创建链表,删除指定位置的节点,输出剩余链表,并在程序结束时释放所有节点的内存。如果删除失败,则输出0。
阅读全文