使用链接列表将元素压入堆栈

时间:2018-09-19 15:18:42

标签: data-structures linked-list stack head

为什么在将元素压入堆栈时返回头指针?这是必要的还是好的做法?非常感谢,我想我缺少了一些东西。例如:

   struct node* push(struct node* head,int data)
   {
    struct node* tmp = (struct node*)malloc(sizeof(struct node));
    if(tmp == NULL)
    {
    exit(0);
    }
    tmp->data = data;
    tmp->next = head;
    head = tmp;
    return head;
}

2 个答案:

答案 0 :(得分:0)

如果要在单链表的顶部构建堆栈,则必须始终在head上插入新节点。因为如果要从tail插入节点,则在弹出/删除节点期间,需要将tail->prev设置为新的tail。但是单链表上没有prev指针。

答案 1 :(得分:0)

返回head的原因是为了确保您不会失去列表的首位。

考虑链接列表的结构。当列表中有四个项目时,它看起来像这样:

A -> B -> C -> D

“ head”是第一个元素A

现在,您要将一个名为X的新项目压入堆栈。您将其添加到列表的开头:

X -> A -> B -> C -> D

现在,head是新的第一个元素X

现在,让我们看看如何使用它。您有一个链接列表指针,将其称为listHead,并将其初始化为NULL。您要向其中添加项目:

struct node* listHead = NULL;
...
listHead = push(listHead, 22);

如果您没有从head函数返回push,则永远不会为listHead分配新值。永远是NULL;