【问题标题】:Pushing an element onto the stack using linked lists使用链表将元素压入堆栈
【发布时间】:2019-02-23 19:49:44
【问题描述】:
为什么在将元素压入堆栈时返回头指针?这是必要的还是只是好的做法?非常感谢,我想我错过了一些东西。例如:
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;
}
【问题讨论】:
标签:
data-structures
linked-list
stack
head
【解决方案1】:
如果你想在单链表之上建立一个栈,你必须总是在head 上插入新节点。因为如果要从tail 插入节点,在弹出/删除节点期间,您需要将tail->prev 设置为新的tail。但是单链表上没有prev指针。
【解决方案2】:
您返回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);
如果您没有从 push 函数返回 head,那么您永远不会为 listHead 分配新值。永远是NULL;