删除带头结点的单链表中的指定结点
时间: 2024-12-28 09:34:15 浏览: 8
删除带头结点的单链表中的指定结点涉及到链表操作的基本知识,假设我们要删除的节点是指针`node`,步骤如下:
1. 首先检查头结点是否就是要删除的节点,如果是,则将头结点指向下一个节点(如果存在),并将头指针设为`None`(Python中通常表示空)。
2. 如果头结点不是目标节点,我们遍历链表。对于每个非头节点,我们需要检查当前节点的下一个节点是否就是要删除的节点。如果找到,就更新当前节点的`next`指针,使其指向被删除节点的下一个节点。
3. 不断移动当前节点到下一个,直到找到或超过目标节点。
4. 这样,被删除的节点就会从链表中移除,而不会对其他节点产生影响。
这里是一个简单的伪代码示例:
```python
def delete_head_node(node, target):
if node is not None and node.val == target:
return node.next
current = node
while current is not None and current.next is not None:
if current.next.val == target:
current.next = current.next.next
break
current = current.next
return node
```
相关问题
帮我写一段(递归删除不带头结点单链表中指定值)的代码
void deleteNode(Node* head, int val) {
Node* p = head;
while (p != NULL && p->val != val) {
p = p->next;
} if (p == NULL) return; Node* tmp = p->next;
p->val = tmp->val;
p->next = tmp->next;
delete tmp;
}
设计一个算法,将一个结点值为自然数的带头结点单链表拆分为两个带头结点单链表,原表中保留值为偶数的结点,而值为奇数的结点按它们在原表中的相对次序组成一个新的带头结点单链表。
算法如下:
1. 定义两个新的带头结点单链表,分别为evenList和oddList。
2. 遍历原链表,如果结点的值为偶数,则将该结点插入evenList中;如果结点的值为奇数,则将该结点插入oddList中。
3. 遍历完原链表后,将oddList插入到evenList的末尾。
4. 返回evenList和oddList。
代码实现如下:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
pair<ListNode*, ListNode*> splitList(ListNode* head) {
ListNode* evenList = new ListNode(0);
ListNode* oddList = new ListNode(0);
ListNode* evenTail = evenList;
ListNode* oddTail = oddList;
ListNode* cur = head->next;
while (cur != NULL) {
if (cur->val % 2 == 0) {
evenTail->next = cur;
evenTail = evenTail->next;
} else {
oddTail->next = cur;
oddTail = oddTail->next;
}
cur = cur->next;
}
evenTail->next = oddList->next;
oddTail->next = NULL;
return make_pair(evenList, oddList);
}
```
阅读全文