为什么在将元素压入堆栈时返回头指针?这是必要的还是好的做法?非常感谢,我想我缺少了一些东西。例如:
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;
}
答案 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
;