有一个单链表,head为单链表的头指针,试编写一个算法查找数据域为X 的节点,并返回链指针。
时间: 2023-05-15 12:05:40 浏览: 59
可以使用以下算法查找数据域为X的节点:
ListNode* findNode(ListNode* head, int X) {
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == X) {
return curr;
}
curr = curr->next;
}
return NULL;
}
其中,ListNode是单链表的节点结构体,包含一个整型数据域val和一个指向下一个节点的指针next。head是单链表的头指针,指向第一个节点。X是要查找的数据域的值。算法从头节点开始遍历链表,如果找到了数据域为X的节点,则返回该节点的指针;否则返回NULL。
相关问题
写出建立单链表的算法,Head为所建单链表的头指针
好的,我可以为您提供单链表的建立算法,具体步骤如下:
1. 定义节点结构体,包含数据域和指向下一个节点的指针域
2. 创建头节点Head,并将其指向空
3. 从输入中获取要插入链表中的数据,创建一个新节点并将数据存储在其中
4. 将新节点插入到链表中,找到合适的插入位置,使得链表中数据的顺序正确
5. 重复步骤3和步骤4,直到所有的数据都插入到链表中
6. 返回链表的头节点Head
这是一个基本的单链表建立算法,您可以根据具体的需求进行修改和优化。希望我的回答能够帮到您!
自定义单链表结构,写出删除链表首个值为X的算法。用c语言写
好的,下面是一种可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node;
// 删除链表首个值为 X 的节点
void deleteFirstX(Node **head, int x) {
Node *p = *head;
Node *prev = NULL;
while (p != NULL && p->data != x) {
prev = p;
p = p->next;
}
if (p != NULL) {
if (prev == NULL) { // 如果是头节点
*head = p->next;
} else {
prev->next = p->next;
}
free(p); // 释放节点内存
}
}
int main() {
// 构造链表 1 -> 3 -> 2 -> 3 -> 4
Node *head = (Node *)malloc(sizeof(Node));
head->data = 1;
head->next = (Node *)malloc(sizeof(Node));
head->next->data = 3;
head->next->next = (Node *)malloc(sizeof(Node));
head->next->next->data = 2;
head->next->next->next = (Node *)malloc(sizeof(Node));
head->next->next->next->data = 3;
head->next->next->next->next = (Node *)malloc(sizeof(Node));
head->next->next->next->next->data = 4;
head->next->next->next->next->next = NULL;
// 删除链表首个值为 3 的节点
deleteFirstX(&head, 3);
// 遍历链表
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 释放链表内存
p = head;
while (p != NULL) {
Node *q = p;
p = p->next;
free(q);
}
return 0;
}
```
首先定义了链表结构体 `Node`,包含数据域 `data` 和指针域 `next`。然后实现了删除链表首个值为 `x` 的节点的函数 `deleteFirstX`,其参数为链表头指针 `head` 和需要删除的值 `x`。函数内部使用了两个指针 `p` 和 `prev`,`p` 用于遍历链表,`prev` 用于记录 `p` 的前一个节点。当 `p` 指向值为 `x` 的节点时,将其从链表中删除,并释放内存。最后在主函数中演示了如何使用该函数删除链表中的节点,并遍历链表输出剩余节点的值。