建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。 输入格式: 第一行为链表长度n; 第二行为链表中的n个数据元素的值; 第三行为需要删除的元素值。 输出格式: 输出为删除后的链表中的所有数据元素的值。
时间: 2023-06-19 20:04:23 浏览: 178
以下是一种可能的实现方式(使用C++语言):
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* deleteNode(ListNode* head, int val) {
ListNode dummy(0);
dummy.next = head;
ListNode* prev = &dummy;
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == val) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy.next;
}
int main() {
int n;
cin >> n;
ListNode* head = NULL;
ListNode* tail = NULL;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
ListNode* node = new ListNode(x);
if (head == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
int val;
cin >> val;
head = deleteNode(head, val);
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
return 0;
}
```
该程序定义了一个链表结构体 `ListNode`,包含一个整数值 `val` 和一个指向下一个节点的指针 `next`。`deleteNode` 函数接受一个链表头指针和一个整数值作为参数,返回删除指定元素后的链表头指针。该函数首先创建一个虚拟头节点 `dummy`,将其指向原链表的头节点,然后遍历整个链表,对于每个节点,判断其值是否等于指定值,如果是,则将其从链表中删除,并释放其内存空间,然后将当前节点指针指向其后继节点;否则,将前驱节点指针和当前节点指针都向后移动一个节点。最后返回虚拟头节点的后继节点,即删除指定元素后的链表头指针。在主函数中,首先读入链表的长度和元素值,并构建链表;然后读入需要删除的元素值,并调用 `deleteNode` 函数进行删除;最后遍历删除后的链表,输出所有元素值。