链表中更好的编程实践

时间:2015-03-30 15:39:53

标签: c data-structures computer-science

在链表中哪个是更好的编程实现使用双指针或只是全局声明头指针

//这里头部双指针作为参数传递

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;
     }
  }

2 个答案:

答案 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;
}