在单链表中插入



以下在单链表中插入的方法的优缺点是什么?

struct node
{
    int data;
    struct node *next;
};
void insert(struct node** head,int val)
{
    struct node *nptr=(struct node*)malloc(sizeof(struct node));
    nptr->data=val;
    nptr->next=*head;
    *head=nptr;
}
struct node* insert(struct node *head,int val)
{
    struct node *nptr=(struct node*)malloc(sizeof(struct node));
    nptr->data=val;
    nptr->next=head;
    return nptr;
}

返回node*的函数可用于表达式。例如,为了创建一个包含2个节点的列表,你可以这样写(理论上):

node* head = insert(insert(NULL, 1), 2);

然而,在现实生活中您必须检查malloc的返回值。这意味着两个函数都需要修改以包含此检查。例如,第一个函数的更正确的版本应该是:

bool insert(struct node** head,int val)
{
  struct node *nptr=(struct node*)malloc(sizeof(struct node));
  if (nptr != NULL)
  {
    nptr->data=val;
    nptr->next=*head;
    *head=nptr;
    return true;
  }
  else
  {
    return false;
  }
}

在表达式中使用这些修改后的函数仍然是可能的,但是你必须通过三元操作符调用它们,这将增加表达式的长度和复杂性。

至于你们两种情况的呼叫效率,也没有明确的答案。您的代码可能由针对各种硬件的各种编译器编译—例如,请参阅x86调用约定,以更好地理解调用者函数和被调用者函数之间发生的事情。所以,在某些情况下,第一个函数会快一点,在其他情况下,第二个函数会快一点。有些编译器甚至会将两个函数编译成完全相同的汇编代码。

相关内容

  • 没有找到相关文章

最新更新