在链表中的第 n 个位置插入节点
Inserting a node in nth position in a linked list
#include<iostream>
using namespace std;
struct node {
int data;
node *link;
};
node *head = NULL;
void insert(int data, int n)
{
node *temp = new node();
temp->data = data;
if (n == 1)
{
temp->link = head;
head = temp;
}
else
{
node* ptr = head;
for (int i = 1; i <= n - 1; i++)
ptr = ptr->link;
temp->link = ptr->link;
ptr->link = temp;
}
}
void print()
{
cout << "list is: ";
node *temp = head;
while (temp != NULL)
{
cout << temp->data << " ";
temp = temp->link;
}
cout << endl;
}
int main()
{
insert(2, 1);
insert(3, 2);
insert(4, 3);
insert(5, 4);
insert(6, 5);
print();
return 0;
}
这是在第 n 位实现在链表中插入的代码。数据和位置是从主位置传递的。
我不明白我可能犯的错误是什么,这与for loop
有关。
它不会执行,但是如果我进行以下更改:
for(int i=0;i<n-2;i++)
它工作正常。
第一个insert(2,1)
工作正常。所以你有这样的链表
(2)->NULL
|
head
在第二个插入中,让我们按照代码,
1. else
2. {
3. node* ptr = head;
4. for (int i = 1; i <= n - 1; i++)
5. ptr = ptr->link;
6. temp->link = ptr->link;
7. ptr->link = temp;
8. }
第 3 行,ptr
指向head
。 n
为 2
(2)->NULL
|
head
|
ptr
第 4 行,1 <= (2-1)
true
因为1 == 1
,所以 for 循环运行一次
第 5 行,ptr
移动一步,因此指向NULL
(2)->NULL
| |
head |
|
ptr
6号线,ptr->link
叫,NULL->link
。所以它在这里崩溃了。
当你做for(int i=0;i<n-2;i++)
时,n
是2,所以0 < (2-2)
是false
,所以它运行良好。注意:仅当按示例所示的顺序进行插入调用时才有效。如果以错误的顺序调用它们,它将不起作用。
将第 6 行更改为 temp->link = ptr;
,也应该在不更改循环的情况下工作。
"在链表中的第n个位置插入节点":
使用std::list
而不是自己滚动。然后使用 std::list::insert。
另外;考虑只使用std:: vector
。列表是一种可怕的(指针追逐,缓存未命中诱导)数据结构,用于现代CPU。std::vector
几乎总是会击败它(不管你的教科书对理论表现怎么说)。
相关文章:
- 将一个向量插入另一个向量的某个位置
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 如何在另一个字符串的x位置插入一个字符串?
- 有没有办法在unordered_map的某个位置插入元素
- C 从特定位置插入其他向量中的载体
- 在链表中的第 n 个位置插入节点
- 使用 C++ 在单向链表的指定位置插入节点时出现分段错误
- 在文件中的任意位置插入动态大小对象
- 在Embarcadero Tools API中的光标位置插入文本
- 在链接列表C 中的某个位置插入节点
- std::list c++是连续的,那么在序列中的任何位置插入和擦除操作都需要恒定的时间
- C++在第4个位置插入一个字母
- C++ 在追加 Windows API 的特定位置插入文本
- 在字符数组中的特定位置插入字符
- 使用memcpy移动数组并在给定位置插入一个新元素
- TinyXML在最后一个位置插入
- 当在任意位置插入/放置元素时,C++向量会导致分割错误
- 在链表中的某个位置插入一个节点
- 在二叉树的特定位置插入元素
- 在奇异链表中的特定位置插入