int insert_link(LinkList L,int i,ElemType e) { LinkList S,P=L; S=(LinkList)malloc(sizeof(LNode)); S->data=e; int k=0; while(P->next!=NULL) { P=P->next; k++; } if(k==0&&i==1) { L->next=S; return 1; } int j=0; if(i<1||i>k+1) { return 0; } else { while(j!=i-1) { L=L->next; j++; } S->next=L->next; L->next=S; return 1; } }
时间: 2024-01-01 16:03:56 浏览: 147
数据结构与算法-linklist逆转
这是一个单链表的插入操作,函数的作用是在链表 L 的第 i 个位置上插入元素 e。下面是代码的注释说明:
```c
int insert_link(LinkList L,int i,ElemType e) {
LinkList S,P=L; // 定义插入节点 S 和 P 指针
S=(LinkList)malloc(sizeof(LNode)); // 分配节点空间
S->data=e; // 节点数据域赋值为 e
int k=0;
while(P->next!=NULL) // 遍历链表,找到最后一个节点
{
P=P->next;
k++;
}
if(k==0&&i==1) // 特判链表为空的情况
{
L->next=S; // 直接插入节点
return 1;
}
int j=0;
if(i<1||i>k+1) // 判断插入位置是否合法
{
return 0; // 插入位置不合法,返回 0
}
else
{
while(j!=i-1) // 遍历链表,找到插入位置的前一个节点
{
L=L->next;
j++;
}
S->next=L->next; // 将新节点插入到链表中
L->next=S;
return 1;
}
}
```
需要注意的是,该函数假设链表 L 中的元素从位置 1 开始计数,如果你的链表从 0 开始计数,需要在判断插入位置时进行对应的修改。
阅读全文