输入一个学号,在单链表上查找该学号的结点,找到,则删除该结点,找不到,则给出提示。
时间: 2024-03-26 16:40:36 浏览: 51
删除单链表中重复结点
4星 · 用户满意度95%
好的,这是一个单链表的基本操作,我可以为您提供一个 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(-1);
dummy.next = head;
ListNode* pre = &dummy;
ListNode* cur = head;
while (cur != NULL) {
if (cur->val == val) {
pre->next = cur->next;
delete cur;
return dummy.next;
}
pre = cur;
cur = cur->next;
}
cout << "未找到学号为" << val << "的学生" << endl;
return dummy.next;
}
int main() {
// 创建链表
ListNode* head = new ListNode(1001);
head->next = new ListNode(1002);
head->next->next = new ListNode(1003);
head->next->next->next = new ListNode(1004);
// 删除结点
head = deleteNode(head, 1003);
// 输出链表
ListNode* cur = head;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
return 0;
}
```
在上面的代码中,我们先创建了一个单链表,然后调用 `deleteNode` 函数来删除链表中指定学号的结点。如果找到了该结点,则删除它并返回新的链表头结点;如果没找到,则输出提示信息并返回原链表头结点。最后,我们遍历链表并输出所有结点的学号,以验证删除操作是否正确。
阅读全文