【发布时间】:2019-01-15 18:06:43
【问题描述】:
#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++)
效果很好。
【问题讨论】:
-
在调试器中启动程序的完美点,逐行检查代码并检查到底发生了什么。
-
您应该在取消引用之前检查 ptr 是否为空。
-
如果你需要插入到第 n 个位置,那么很可能你不应该使用链表
-
你没有问问题。如果对给定的更改“它工作正常”,为什么首先要问一个?你不明白你所做的改变吗?如果没有,你为什么做到?意大利面条式编程(随意往墙上扔面条,希望最终能粘住)并没有真正的好处。
-
你泄漏了你分配的所有内存。
标签: c++ data-structures linked-list singly-linked-list