写一个删除单链表的函数
时间: 2024-09-20 18:17:24 浏览: 25
在Python中,你可以编写一个名为`delete_node`的函数来删除给定节点的单链表。这里是一个基本的例子:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def delete_node(head, key):
if head is None or head.val == key:
return head下一个节点
curr = head
while curr.next is not None and curr.next.val != key:
curr = curr.next
if curr.next is not None:
curr.next = curr.next.next
else:
print(f"键 {key} 不存在于链表中")
# 使用示例
# 创建链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
# 删除值为2的节点
delete_node(head, 2)
```
这个函数首先检查头节点是否就是目标节点,然后遍历链表直到找到目标节点或到达链表末尾。如果找到目标节点,就将它之后的节点指向它的下一个节点;如果没有找到,则说明该键未存在于链表中。
相关问题
写一个单链表中删除节点的函数
在单链表中删除一个节点通常需要分为两步:首先找到要删除的节点,然后修改前一个节点的指针使其指向下一个节点,以跳过被删除的节点。这里是一个简单的伪代码示例:
```python
def delete_node(head, target_value):
# 如果链表为空或目标值不存在
if head is None or head.value != target_value:
return head
# 遍历链表
current = head
prev = None
while current is not None and current.value != target_value:
prev = current
current = current.next
# 删除节点
if current is not None:
# 如果找到了目标节点,则更新prev的next指针
if prev is None:
head = current.next
else:
prev.next = current.next
return head
```
在这个函数中,`head` 是链表的头结点,`target_value` 是要删除的节点值。如果找到目标节点,就将 `prev.next` 设为 `current.next`,否则直接返回原链表。
用c++写一个销毁单链表的结构体或者函数
在C++中,你可以通过定义一个删除节点并释放内存的函数来销毁单链表。首先,你需要定义一个链表节点的结构体(Node),然后创建一个函数(如`deleteLinkedList`)来遍历链表并删除每个节点。这里是一个简单的示例:
```cpp
#include <iostream>
// 定义链表节点结构体
struct Node {
int data;
Node* next; // 指向下一个节点的指针
~Node() { // 构造析构函数,用于自动释放内存
delete next; // 如果next不是nullptr,就递归删除下一个节点
// 也可以选择在这里释放data占用的空间,但通常数据会被容器管理
}
};
// 销毁单链表的函数
void deleteLinkedList(Node*& head) {
if (head == nullptr) return; // 链表为空,直接返回
Node* current = head;
while (current != nullptr) {
Node* temp = current; // 临时保存当前节点
current = current->next; // 移动到下一个节点
delete temp; // 删除并释放当前节点
}
head = nullptr; // 更新头指针为nullptr,表示链表已空
}
int main() {
// 创建并初始化链表...
// ...
deleteLinkedList(head); // 调用销毁链表函数
return 0;
}
```
在这个例子中,当你不再需要链表时,只需调用`deleteLinkedList(head)`即可。注意,由于链表的特性,这个过程通常是逐个节点地进行,直到链表变为空。