C - 简化链表指针循环



试图从文件中扫描数字并将其存储为链表,但是每次扫描和存储值时,用于链接节点的临时指针(PTR)都会运行一个while循环。有没有办法在不使用 while 循环的情况下简化这一点?我的方法似乎行不通。

原始代码:

struct node
{
int data;
struct node *link;
} *head = NULL, *ptr = NULL, *temp = NULL;
int main()
{
-----
-----
for (i = 0; i < n ; ++i)
{
temp = malloc(sizeof(struct node));
fscanf(fptr, "%d", &(temp->data));
temp->link = NULL;
if (head == NULL)
head = temp;

else
{
ptr = head;
while (ptr->link != NULL)
ptr = ptr->link;
ptr->link = temp;
}
}
-----
}

我的方法:

struct node
{
int data;
struct node *link;
} *head = NULL, *ptr = NULL, *temp = NULL;
int main()
{
-----
-----
for (i = 0; i < n ; ++i)
{
temp = malloc(sizeof(struct node));
fscanf(fptr, "%d", &(temp->data));
temp->link = NULL;
if (head == NULL)
{
head = temp;
ptr = head;
}

else
{
ptr->link = temp;
ptr->link = ptr->link->link;
}
}
-----
}

在此代码片段中

else
{
ptr->link = temp;
ptr->link = ptr->link->link;
}

ptr->link设置为NULL,因为实际上它设置为temp->link由于此分配而等于NULL

temp->link = NULL;

你需要的是写

else
{
ptr->link = temp;
ptr = temp;
}

实际上,您正在尝试实现一个双向正弦链表,其中指针ptr扮演尾部指针的角色。

最新更新