C语言 创建一个空节点



>我正在尝试创建一个空节点,而不会影响指向连接列表/节点头部的指针。那么,我的代码有任何问题吗?

CellPtr Create_Node(CellPtr created, int size)
{
CellPtr head;
int i;
if((created=(CellPtr)malloc(sizeof(Cell)))==NULL)
{
printf("Allocation Error");
exit(1);
}
head=created;
for(i=0; i<size-1; i++)
{
if((created->next=(CellPtr)malloc(sizeof(Cell)))==NULL)
{
printf("Allocation Error");
exit(1);
}
created=created->next;
}
created->next=NULL;
return head;
}

问题是您传入created但立即覆盖它。我不知道为什么created被传递进来。

您似乎正在尝试创建一个包含size+ 1 个空单元格的新链表。我建议将其分成两部分,一部分用于创建一个空单元格,另一部分用于添加空单元格。

从风格上讲,指针类型令人困惑。它打破了*表示指针的简单视觉惯例。让我们摆脱它。

typedef struct _Cell {
struct _Cell *next;
} Cell;

然后我们有一个函数来制作和初始化一个空单元格。这耗尽了代码。并且不要施放马洛克。

Cell *CreateCell() {
Cell *cell = malloc(sizeof(Cell));
if( cell == NULL ) {
fprintf(stderr, "Allocation of Cell failed");
exit(1);
}
cell->next = NULL;
return cell;
}

然后是一个单独的函数,用于将空单元格添加到现有单元格。我决定退回新的尾巴,因为这似乎很有用。

Cell *AddCells(Cell *tail, size_t num_cells) {
for(size_t i = 0; i < num_cells; i++) {
tail->next = CreateCell();
tail = tail->next;
}
return tail;
}

现在我们可以创建一个单元格,添加到它,并在需要时有效地拥有新的尾巴。

Cell *head = CreateCell();
Cell *tail = AddCells(head, 5);

我们可以将单元格添加到任何现有链表的尾部。

相关内容

  • 没有找到相关文章

最新更新