2. 1 7 试写一算法,在无头结点的动态单链表上实现线性表操作 I nsert( L, i , b),并和在带头结点的动态单 链表上实现相同操作的算法进行比较,用C++编写
时间: 2023-03-20 15:00:20 浏览: 344
无头结点的动态单链表实现线性表操作 Insert(L, i, b) 的算法:
1. 如果 i<=0,则将 b 插入到链表的第一个位置,使其成为新的头结点。
2. 如果 i>0,则从头结点开始遍历链表,找到第 i-1 个结点,然后将 b 插入到第 i-1 个结点之后,使其成为第 i 个结点。
与带头结点的动态单链表实现相同操作的算法相比,无头结点的动态单链表实现 Insert 操作需要额外考虑头结点的插入问题,需要在插入第一个元素时进行特殊处理。而带头结点的动态单链表实现 Insert 操作则不需要额外处理头结点的插入问题,只需要从头结点开始遍历即可。
下面是用 C++ 实现无头结点的动态单链表实现线性表操作 Insert(L, i, b) 的算法:
```cpp
#include<iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
void Insert(Node*& L, int i, int b) {
Node* p = L;
Node* q = new Node;
q->data = b;
q->next = NULL;
if (i <= 0) { // 在链表头插入元素
q->next = L;
L = q;
}
else {
for (int j = 1; j < i && p; j++) {
p = p->next;
}
if (p) { // 找到第 i-1 个结点
q->next = p->next;
p->next = q;
}
}
}
int main() {
Node* L = NULL; // 初始化链表
Insert(L, 0, 1); // 在链表头插入元素
Insert(L, 1, 2); // 在链表第二个位置插入元素
Insert(L, 1, 3); // 在链表第二个位置插入元素
// 遍历链表
Node* p = L;
while (p) {
cout << p->data << " ";
p = p->next;
}
return 0;
}
```
以上是无头结点的动态单链表实现 Insert 操作的 C++ 实现代码。
阅读全文