使用链表将元素压入堆栈

Pushing an element onto the stack using linked lists

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

   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;
}

如果你想在单链表的顶部建立一个栈,你必须总是在head上插入新节点。因为如果要从 tail 插入节点,在弹出 up/removing 节点期间,您需要将 tail->prev 设为新的 tail。但是单向链表上没有prev指针。

你returnhead的原因是为了不丢掉榜首。

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

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 函数中 return head,那么您永远不会为 listHead 分配新值。它总是 NULL;