用C语言写出单向链表查找节点的算法
时间: 2023-12-14 21:37:05 浏览: 87
以下是用 C 语言实现单向链表查找节点的算法示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode *next;
};
// 查找链表中第一个值为 val 的节点,返回该节点的指针,如果不存在则返回 NULL
struct ListNode* findNode(struct ListNode* head, int val) {
// 遍历链表
while (head != NULL) {
// 如果当前节点的值为 val,则返回该节点的指针
if (head->val == val) {
return head;
}
// 否则,继续遍历下一个节点
head = head->next;
}
// 链表中不存在值为 val 的节点,返回 NULL
return NULL;
}
int main() {
// 创建链表的头结点
struct ListNode* head = (struct ListNode*) malloc(sizeof(struct ListNode));
head->val = 1;
head->next = NULL;
// 添加新节点
struct ListNode* node1 = (struct ListNode*) malloc(sizeof(struct ListNode));
node1->val = 2;
node1->next = NULL;
head->next = node1;
// 添加新节点
struct ListNode* node2 = (struct ListNode*) malloc(sizeof(struct ListNode));
node2->val = 3;
node2->next = NULL;
node1->next = node2;
// 查找链表中值为 2 的节点
struct ListNode* node = findNode(head, 2);
if (node != NULL) {
printf("找到了节点,节点的值为 %d\n", node->val);
} else {
printf("未找到节点\n");
}
// 释放链表节点的内存
free(node1);
free(node2);
free(head);
return 0;
}
```
阅读全文