设计一个算法,在一个单链表的pos位置插入一个int值为value的结点,在单链表中删除值为val的结点,给出单链表表头和结点的存储结构定义,给出在单链表插入结点的函数和删除结点的函数。(写出核心代码即可,健壮性可以不做考虑)
时间: 2024-10-18 15:17:37 浏览: 41
LinkList单文件_一个简单单链表_
首先,我们假设单链表的节点结构如下:
```cpp
struct ListNode {
int data; // 节点数据
ListNode* next; // 指向下一个节点的指针
ListNode(int val = 0) : data(val), next(nullptr) {}
};
```
接下来,我们可以设计两个函数:`insertAtPos`用于在指定位置插入节点,`deleteNodeWithValue`用于删除具有特定值的节点。
```cpp
// 插入结点函数
ListNode* insertAtPos(ListNode* head, int pos, int value) {
if (head == nullptr || pos <= 0) return head;
ListNode newNode(value); // 新节点
if (pos == 1) { // 如果要在头部插入
newNode.next = head;
return newNode;
}
ListNode* current = head;
for (int i = 1; i < pos - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current != nullptr) {
newNode.next = current->next;
current->next = newNode;
}
return head;
}
// 删除结点函数
ListNode* deleteNodeWithValue(ListNode* head, int value) {
if (head == nullptr) return head;
if (head->data == value) { // 如果头节点就是要删除的
ListNode* temp = head;
head = head->next;
delete temp; // 释放内存
return head;
}
ListNode* current = head;
while (current->next != nullptr && current->next->data != value) {
current = current->next;
}
if (current->next != nullptr) {
ListNode* temp = current->next;
current->next = current->next->next; // 更新指针跳过被删节点
delete temp; // 释放内存
}
return head;
}
```
以上代码的核心部分已提供,但请注意,实际应用中应考虑到异常处理(如无效位置或不存在的节点值),以及对于链表为空的情况。
阅读全文