我是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;
};
答案 0 :(得分:0)
您希望循环中temp->next
的值来自哪里?
另外,为了获得更多的元数据,你可能会更好地使用例如在C ++中使用std :: list而不是像这样实现自己的数据结构。即使对于经验丰富的工程师来说,这种努力也是出了名的错误。
答案 1 :(得分:0)
假设您到达最后一个节点..
现在在内部循环中,您递增walker
..所以现在walker = NULL
..
所以这句话给出了错误temp->data = walker->data
..
此外,您只是创建节点并复制不连接新链接列表的数据..
沿着这条线改变它。
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;
}