创建包含n(n>0)个节点的单向链表,每个节点存储一个整数。根据给定整数查找存储此整数的节点:若找到此节点,则在其后面插入新节点,打印新链表;若未找到,则打印原链表。
时间: 2024-03-20 19:44:16 浏览: 47
怎样找到链表倒数第k个元素
下面是一个示例程序,实现了根据给定整数在单向链表中查找并插入新节点的功能:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* insert(struct Node* head, int target, int value) {
struct Node* current = head;
while (current != NULL) {
if (current->data == target) {
// 找到目标节点,创建新节点并插入链表
struct Node* new_node = malloc(sizeof(struct Node));
new_node->data = value;
new_node->next = current->next;
current->next = new_node;
return head;
}
current = current->next;
}
// 没有找到目标节点,打印原链表
current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
return head;
}
int main() {
// 创建包含 n 个节点的单向链表
int n;
printf("请输入链表中节点的个数 n:");
scanf("%d", &n);
struct Node* head = NULL;
struct Node* tail = NULL;
for (int i = 0; i < n; i++) {
int value;
printf("请输入节点 %d 的值:", i + 1);
scanf("%d", &value);
struct Node* new_node = malloc(sizeof(struct Node));
new_node->data = value;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
// 根据给定整数查找并插入新节点
int target, value;
printf("请输入要查找的整数:");
scanf("%d", &target);
printf("请输入要插入的新整数:");
scanf("%d", &value);
head = insert(head, target, value);
// 释放链表内存
struct Node* current = head;
while (current != NULL) {
struct Node* temp = current;
current = current->next;
free(temp);
}
return 0;
}
```
在这个示例程序中,我们定义了一个 `insert` 函数,接收链表头指针、目标值和新值作为输入,如果找到目标节点就在其后面插入新节点,并返回新链表的头指针;如果没有找到目标节点,就打印原链表并返回原链表的头指针。在 `main` 函数中,我们首先创建一个包含 n 个节点的单向链表,然后根据给定整数查找并插入新节点。最后,我们释放了链表的内存。
阅读全文