#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct node{
int size;
char* name;
node* next;
}node;
void insertnodes( node** arrayhead , int index , node* ptr){
index = index - 1 ;
while ( index--){
*arrayhead = (*arrayhead)->next;
}
(*arrayhead)->next = new node;
(*arrayhead)->next = ptr;
}
int main(){
int n = 4;
node *A[n] ;
for ( int i = 0 ; i < n ; i++){
A[i] = NULL ;
}
A[0] = new node;
A[0]->size = 10;
A[0]->name = new char;
A[0]->name = "gunna";
A[0]->next = NULL;
//cout << A[0]->name << endl;
node* ptr = new node ;
ptr->size = 10;
ptr->name = new char;
ptr->name = "param";
ptr->next = NULL;
insertnodes(&A[0] , 1 , ptr);
node* ptrr = new node ;
ptrr->size = 10;
ptrr->name = new char;
ptrr->name = "sidd";
ptrr->next = NULL;
insertnodes(&A[0] , 2 , ptrr);
cout << A[0]->name << endl;
cout << A[0]->next->name;
}
它应该打印“gunna”和“param”。
但它将“param”和“sidd”作为输出。
我不知道我哪里出错了。我尝试了很多东西,但我仍然感到困惑 请帮忙...... 我正在使用代码块来编译这个程序..
答案 0 :(得分:0)
在你的insertnodes()
中你传递的是双指针 node** arrayhead
,因此,稍后通过去除它,你将覆盖next
指针的当前值,这将导致程序中的内存泄漏。
您应该做的是创建一个临时变量node* tmp
,当index
减少时,您将更改该临时变量next
。然后,您不需要为下一个指针分配新节点,因为您已经有一个指针要添加到void insertnodes(node** arrayhead, int index, node* ptr) {
index = index - 1;
node* tmp = *arrayhead;
while (index--) {
tmp = tmp->next;
}
tmp->next = ptr;
}
。
固定代码如下所示:
int n = 4;
node *A[n] ;
for ( int i = 0 ; i < n ; i++){
A[i] = NULL ;
}
编辑:这完全没用:
head
创建链表所需的只是一个节点(例如列表的头部)。
但由于这是一个链表,你不需要真正传递索引。您所需要的只是一个node->next
,您可以在其上进行迭代,直到找到NULL
为Eclipse
- 这就是您需要插入新节点的地方(这就是它的方式) #39;通常已完成。)