将指针传递给头指针,void insertNode函数?

时间:2013-06-27 21:17:08

标签: c pointers recursion insert linked-list

这是一个旨在在基本链表的末尾插入新节点的功能。

node *insert(node *head, int data)
{
   if (head == NULL)
      return createNode(data);

   head->next = insert(head->next, data);

   return head;
}

如何修改它以使其没有返回值,而是将指针传递给头部 指针?是否可以像上面那样递归地写出来?

这是函数签名:

void insert(node **head, int data)

2 个答案:

答案 0 :(得分:1)

像这样:

void insert(node **head, int data)
{
   if (*head == NULL)
      *head = createNode(data);

   insert(&(*head)->next, data);
}

答案 1 :(得分:-1)

非递归版:

void insert(node **head, int data)
{
    node *p;

    if (*head == NULL) {
        *head = createNode(data);
        return;
    }
    for (p = *head; p->next != NULL; p = p->next)
        ;
    p->next = createNode(data);
}

Jim Balter的建议:

void insert(node **head, int data)
{
    for (; *head != NULL; head = &(*head)->next)
        ;
    *head = createNode(data);
}