c++数据结构错误的输出(链表)


#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"one_answers"param"。

,但它给出"param"one_answers"sidd"作为输出。

我不知道我哪里做错了。我试了很多方法,但还是很困惑请帮忙……我正在使用代码块来编译这个程序。

在您的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 ;
}

创建一个链表只需要一个节点(例如list的头)。


但是因为这是一个链表,你不需要传递index。你所需要的是一个head,你可以在上面迭代,直到你找到node->next,这将是NULL -这是你需要插入你的新节点的地方(这是它通常是如何完成的)。

相关内容

  • 没有找到相关文章

最新更新