【发布时间】:2021-11-22 03:12:41
【问题描述】:
所以我正在尝试创建一个包含指向数据的 void 指针的链表的副本 定义是:
typedef struct SinglyLinkedListNode {
void *data;
struct SinglyLinkedListNode *next;
}SinglyLinkedListNode;
typedef struct SinglyLinkedList {
int size;
struct SinglyLinkedListNode *front;
}SinglyLinkedList;
我的克隆链表函数的灵感来自 How to clone a linked list with a head/tail implementation? 唯一的区别是,我的链表没有尾部实现。
这是我的实现
SinglyLinkedListNode *cloneList(SinglyLinkedList *list, SinglyLinkedListNode *head) {
if(head == NULL)
return NULL;
SinglyLinkedListNode *result = (SinglyLinkedListNode *)malloc(sizeof(SinglyLinkedListNode));
result->data = head->data;
if(head->next)
result->next = cloneList(list, head->next);
return result;
}
SinglyLinkedList *cloneFullList(SinglyLinkedList *list) {
if(list == NULL)
return NULL;
SinglyLinkedList *result = (SinglyLinkedList *)malloc(sizeof(SinglyLinkedList));
result->size = list->size;
if(list->front != NULL)
list->front = cloneList(result, list->front);
return result;
}
但是当试图访问这样的数据时
SinglyLinkedList *list1 = (SinglyLinkedList *)malloc(sizeof(SinglyLinkedList));
list1 = cloneFullList(list); //where list is an already existing list which works correctly
SinglyLinkedListNode *curr1 = (SinglyLinkedListNode *)malloc(sizeof(SinglyLinkedListNode));
curr1 = list1->front;
尝试访问 curr1->data 返回一个 SEGMENTATION FAULT。但是当我尝试通过使curr1 = list->front 访问数据时,数据被正确访问。我克隆链接列表的函数的错误在哪里?
【问题讨论】:
-
删除每个例程中的第二个
if。始终设置指针。
标签: c algorithm pointers linked-list clone