在链表中哪个是更好的编程实现使用双指针或只是全局声明头指针
//这里头部双指针作为参数传递
Void insertatend(node **head, int item)
{
node *ptr, *loc;
ptr=(node*)malloc(sizeof(node));
ptr->info=item;
ptr->next=NULL;
if(*head==NULL)
*head=ptr;
else
{
loc=*head;
while (loc->next!=NULL)
{
loc=loc->next;
loc->next=ptr;
}
}
}
或者
//这里我已将头指针声明为全局
void insert(int x)
{
node *ptr,*ptr1;
ptr=(node*)malloc(sizeof(node));
ptr->info=x;
if(head==NULL)
{
ptr->next=head;
head=ptr;
}
else
{
ptr1=head;
while(ptr1->next!=NULL)
{
ptr1=ptr1->next;
}
ptr1->next=ptr;
ptr->next=NULL;
}
}
答案 0 :(得分:0)
我不会说:
void insertatend(node *head, int item)
{
node *ptr, *loc;
ptr=(node*)malloc(sizeof(node));
ptr->info=item;
ptr->next=NULL;
if(head==NULL)
head=ptr;
else
{
loc=head;
while (loc->next!=NULL)
{
loc=loc->next;
loc->next=ptr;
}
}
}
我不知道您为什么要将地址更改为函数内的头指针,因此没有理由将其作为指针传递。
一般来说,良好的编程实践总是会阻碍全局变量,正如您在这些示例中看到的那样:
Are global variables bad?
Why are global variables evil?
When is it ok to use a global variable in C?
答案 1 :(得分:0)
双指针版本可以简化:
Void insertatend(node **head, int item)
{
node *ptr;
ptr=(node*)malloc(sizeof(node));
ptr->info=item;
ptr->next=NULL;
while(*head!=NULL)
head = &((*head)->next);
*head = ptr;
}