C链接列表复制段错误

时间:2014-05-05 19:33:43

标签: c linked-list copy iteration

我是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;
};

2 个答案:

答案 0 :(得分:0)

您希望循环中temp->next的值来自哪里?

另外,为了获得更多的元数据,你可能会更好地使用例如在C ++中使用std :: list而不是像这样实现自己的数据结构。即使对于经验丰富的工程师来说,这种努力也是出了名的错误。

答案 1 :(得分:0)

假设您到达最后一个节点..

现在在内部循环中,您递增walker ..所以现在walker = NULL ..

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

此外,您只是创建节点并复制不连接新链接列表的数据..

  1. 你需要保持新的Head指针在最后返回
  2. 保持对上一个节点的引用,以便您可以将其链接到当前节点
  3. 更新指针
  4. 沿着这条线改变它。

    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;
    }
    
相关问题