试编写在无头结点的单链表上实现将元素x插入到线性表的第i个位置。
时间: 2023-05-24 11:07:00 浏览: 163
假设链表中已经存在i-1个结点,可以通过以下步骤实现在第i个位置插入元素x:
1. 创建一个新的结点node,该结点的数据域为x。
2. 从链表的头结点开始遍历,找到第i-1个结点prev和第i个结点curr。
3. 将node的next指针指向curr,将prev的next指针指向node。
4. 插入完成,返回链表的头结点。
具体的实现代码如下:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* insert(ListNode* head, int i, int x) {
ListNode *node = new ListNode(x);
if (i == 1) {
node->next = head;
return node;
}
ListNode *prev = head;
for (int j = 1; j < i - 1; j++) {
prev = prev->next;
}
ListNode *curr = prev->next;
prev->next = node;
node->next = curr;
return head;
}
```
这个函数的时间复杂度是O(n),其中n是链表中的结点个数。如果需要频繁插入操作,可以考虑使用带头结点的链表,这样可以简化插入的操作。
阅读全文