C链表复制段故障



我对C相当陌生,我正在复制链表。它在while循环中存在错误,我认为我有一些指针问题。此外,我不确定是否需要malloc每个"下一个"节点。我做了什么?这对我来说是有意义的。

struct node* copyList() {
  struct node* walker = head;  // starting point to "walk" the list
  struct node* temp;
  temp = (struct node*)malloc(sizeof(struct node));
  temp->data = walker->data;
  while( walker != NULL ){ // done when we reach the node pointing to NULL
     walker = walker->next;    // advance walker to the next node in the list
     temp = temp->next;
     temp = (struct node*)malloc(sizeof(struct node));
     temp->data = walker->data;
     }
  return walker;
}

节点结构如下

struct node {
    int data;
    struct node* next;
};

假设到达最后一个节点…

现在在循环中,你增加walker ..所以现在walker = NULL ..

所以这个语句给出了一个错误temp->data = walker->data ..

你只是在创建节点和复制数据,而不是连接你的新链表。
  1. 你需要维护新的Head指针在结束时返回
  2. 保持先前节点的引用,以便您可以将其链接到当前节点
  3. 更新指针

按以下行修改

struct node* copyList() {
   struct node* walker = head;  // starting point to "walk" the list
   struct node* newHead=NULL,temp,prev=NULL;
   while( walker != NULL ){ // done when we reach the node pointing to NULL
     temp = (struct node*)malloc(sizeof(struct node)); //create new node
     temp->data = walker->data;          //copy data
     if(prev==NULL)                      //if its first node
         newHead = temp;                 //new head pointer                  
     else          
         prev->next = temp;              //else link to previous node                  
     prev = temp;                        //update pointers
     walker = walker->next;
   }
   return newHead;
}

您期望循环中temp->next的值从哪里来?

同样,为了获得更多的元数据,你最好在c++中使用std::list,而不是像这样实现你自己的数据结构。即使对于经验丰富的工程师来说,这样的努力也是出了名的容易出错。

相关内容

  • 没有找到相关文章

最新更新