酷代码 AI
菜单
服务商

要求实现函数,在带头结点的单链表中新建一个数据域值为x的结点并把它插入为第i个结点(从1开始)。若i的值非法(太大或太小),则不进行插入操作。 函数接口定义: void Insert(Node* head, int i, int x);

以下是实现 `Insert` 函数的完整代码: ```c #include <stdio.h> #include <stdlib.h> // 定义单链表结点结构体 typedef struct Node { int data; struct Node* next; } Node; // 在带头结点的单链表中新建一个数据域值为x的结点并把它插入为第i个结点 void Insert(Node* head, int i, int x) { int j = 0; Node* p = head; // 找到第i-1个结点 while (p != NULL && j < i - 1) { p = p->next; j++; } // 如果i的值非法,不进行插入操作 if (p == NULL || j > i - 1) { return; } // 创建新结点 Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = x; // 插入新结点 newNode->next = p->next; p->next = newNode; } // 打印链表 void printList(Node* head) { Node* p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { // 创建头结点 Node* head = (Node*)malloc(sizeof(Node)); head->next = NULL; // 插入一些数据 Insert(head, 1, 1); Insert(head, 2, 2); Insert(head, 3, 3); // 打印链表 printf("插入前的链表: "); printList(head); // 插入新结点 Insert(head, 2, 4); // 打印链表 printf("插入后的链表: "); printList(head); return 0; } ``` 代码解释: 1. 结构体定义:定义了单链表结点的结构体 `Node`,包含数据域 `data` 和指向下一个结点的指针 `next`。 2. Insert 函数: - 首先,使用指针 `p` 从链表头结点开始遍历,找到第 `i-1` 个结点。 - 如果 `i` 的值非法(即 `p` 为空或 `j > i - 1`),则不进行插入操作。 - 否则,创建一个新结点 `newNode`,并将其数据域设置为 `x`。 - 将新结点插入到第 `i-1` 个结点之后。 3. printList 函数:用于打印链表中的所有元素。 4. main 函数:创建一个带头结点的单链表,并插入一些数据。然后调用 `Insert` 函数插入一个新结点,并打印插入前后的链表。 复杂度分析: - 时间复杂度:$O(i)$,其中 $i$ 是要插入的位置。 - 空间复杂度:$O(1)$,只需要常数级的额外空间。 [2025-12-23 13:19:13 | AI问答 | 730点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多