上述问题用C语言写出
时间: 2024-09-20 14:01:36 浏览: 35
c语言文件读写操作代码要点和难点.zip
以下是使用C语言实现上述题目需求的一个简单示例。首先,我们需要定义`Node`结构体来表示链表的节点,然后编写一个`insertAtTail`函数来进行链表操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 尾插法插入节点
Node* insertAtTail(Node* head, int length, int position, int value) {
Node* tail = head;
Node* newHead = NULL;
// 检查插入位置的有效性
if (position < 1 || position > length + 1) {
printf("-1\n");
return NULL; // 插入失败,返回空指针
}
// 逐个遍历原链表
for (int i = 0; i < length; i++) {
if (i == position - 1) { // 找到插入位置
// 创建新节点并插入
Node* newNode = createNode(value);
newNode->next = tail->next;
tail->next = newNode;
if (!newHead) { // 如果链表为空
newHead = newNode;
}
tail = newNode; // 更新尾节点
} else {
tail = tail->next; // 跟随原链表
}
}
return newHead;
}
// 主函数示例
int main() {
int length, position, value;
scanf("%d", &length); // 输入链表长度
Node* head = NULL; // 初始化头节点为NULL
for (int i = 0; i < length; i++) {
int temp;
scanf("%d", &temp);
head = insertAtTail(head, i+1, position, value); // 递归插入
position = 0; // 为了下一轮插入
}
if (head != NULL) {
printf("Insertion successful, the list is: ");
Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
return 0;
}
```
注意,这个代码示例假设`main`函数外已经有一个输入流(如标准输入`stdin`)用于获取用户输入。实际应用中,你可能需要从文件或者其他数据源读取输入。
阅读全文