带有头结点的单链表按序号查找c语言
时间: 2023-05-10 18:55:27 浏览: 97
可以使用循环遍历单链表,根据节点的序号逐个比较,直到找到目标节点或者遍历完整个链表。以下是一个示例代码:
```
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
ListNode* findNodeByIndex(ListNode* head, int index) {
ListNode* p = head->next;
int i = 1;
while (p != NULL && i < index) {
p = p->next;
i++;
}
if (i == index && p != NULL) {
return p;
} else {
return NULL;
}
}
```
这个函数接受一个带有头结点的单链表的头指针和一个节点序号,返回对应的节点指针。如果找不到对应的节点,返回 NULL。
相关问题
单链表按序号查找结点值c语言
实现代码如下:
```
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* createList(int arr[], int n) {
struct ListNode* head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = arr[i];
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
int searchNode(struct ListNode* head, int pos) {
struct ListNode* p = head;
int cnt = 0;
while (p != NULL && cnt < pos) {
cnt++;
p = p->next;
}
if (p == NULL) {
return -1;
} else {
return p->val;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
struct ListNode* head = createList(arr, n);
int pos = 3;
int val = searchNode(head, pos);
if (val == -1) {
printf("不存在这个节点\n");
} else {
printf("第%d个节点的值为%d\n", pos, val);
}
return 0;
}
```
这是一个基于C语言的单链表结构实现,其中createList函数用于创建一个单链表,searchNode函数用于按序号查找链表中的节点值。
编写算法,按用户输入的数据建立一个单链表,实现在带有头结点的单链表中按序号查找的函数。c语言实现,并给出算法流程
算法流程:
1. 定义一个结构体Node,表示单链表的每个节点,包括数据域和指针域。
2. 定义一个头指针Head,指向链表的头结点,初始为NULL。
3. 输入数据,创建新节点并插入链表中。
4. 实现按序号查找的函数search,输入参数为链表头指针和目标节点的序号,返回对应节点的指针。
5. 在search函数中,遍历链表,记录当前节点的序号,直到找到目标节点或者遍历到链表末尾。
6. 如果找到目标节点,返回该节点的指针;否则返回NULL。
C语言实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点
typedef struct Node {
int data;
struct Node *next;
} Node;
// 创建新节点
Node* create_node(int data) {
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
// 插入节点到链表末尾
void insert_node(Node **head, Node *new_node) {
if (*head == NULL) {
*head = new_node;
} else {
Node *cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
}
// 按序号查找节点
Node* search(Node *head, int pos) {
Node *cur = head;
int i = 1;
while (cur != NULL && i < pos) {
cur = cur->next;
i++;
}
if (i == pos) {
return cur;
} else {
return NULL;
}
}
int main() {
Node *head = NULL;
int n, data;
printf("请输入节点个数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d个节点的值:", i);
scanf("%d", &data);
Node *new_node = create_node(data);
insert_node(&head, new_node);
}
int pos;
printf("请输入要查找的节点序号:");
scanf("%d", &pos);
Node *target = search(head, pos);
if (target != NULL) {
printf("目标节点的值为:%d\n", target->data);
} else {
printf("未找到目标节点\n");
}
return 0;
}
```
示例:
```
请输入节点个数:3
请输入第1个节点的值:1
请输入第2个节点的值:2
请输入第3个节点的值:3
请输入要查找的节点序号:2
目标节点的值为:2
```
阅读全文