在链式存储结构上,试写一个算法,将x插入到单链表的第i个数据元素位置上
时间: 2023-05-26 22:06:23 浏览: 84
单链表上数据的插入
1. 首先需要判断单链表是否为空,如果为空,则无法插入任何元素,直接返回。
2. 接着需要判断插入位置是否合法,即i是否大于0且小于等于当前单链表的长度。若不合法,则无法插入,直接返回。
3. 从头节点开始,遍历单链表,找到第i-1个节点,即待插入位置的前一个节点。
4. 创建一个新的节点,将需要插入的数据x存入该节点。
5. 将新的节点插入到第i-1个节点后面,即新节点的next指针指向第i个节点,第i-1个节点的next指针指向新节点。
6. 若成功插入,则返回true,否则返回false。
算法实现如下:
```
bool InsertNode(LinkList &L, int x, int i)
{
// 判断单链表是否为空
if (L == NULL) {
return false;
}
// 判断插入位置是否合法
if (i < 1 || i > ListLength(L) + 1) {
return false;
}
// 找到第i-1个节点
LinkList p = L;
int j = 1;
while (p != NULL && j < i) {
p = p->next;
j++;
}
// 创建新节点
LinkList q = (LinkList)malloc(sizeof(ListNode));
q->data = x;
// 将新节点插入到第i-1个节点后面
q->next = p->next;
p->next = q;
return true;
}
```
阅读全文