本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。 函数接口定义: int insert_link ( LinkList L,int i,ElemType e); L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则返回0。
时间: 2024-09-23 22:05:17 浏览: 91
在 C 语言中,给定的函数接口 `insert_link` 实现单链表的插入操作,可以按照以下步骤完成:
首先,我们需要定义链表节点的结构体 `LinkList` 和 `ElemType`(这里假设是一个整型):
```c
// 定义链表节点
typedef struct Node {
ElemType data;
struct Node* next;
} Node;
// 链表头指针的定义
typedef Node* LinkList;
```
然后实现 `insert_link` 函数:
```c
int insert_link(LinkList* L, int i, const ElemType e) {
// 检查输入合法性
if (*L == NULL || i <= 0) {
return 0; // 链表为空或插入位置非法,直接返回 0
}
// 创建新的节点
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
return 0; // 内存分配失败,返回 0
}
newNode->data = e;
newNode->next = NULL;
// 插入操作
Node* current = *L;
if (i == 1) { // 插入到头节点
newNode->next = current;
*L = newNode;
} else {
for (int j = 1; j < i && current != NULL; ++j) {
current = current->next;
}
if (current == NULL) { // 插入位置超出范围,返回 0
free(newNode); // 释放内存
return 0;
}
newNode->next = current->next;
current->next = newNode;
}
return 1; // 插入成功,返回 1
}
// 注意:此函数需要链表头指针作为输入,而不是整个链表。同时,在使用完后记得释放所有动态分配的内存。
```
阅读全文