【问题标题】: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;
}

【问题讨论】:

  • 请将其标记为 C 以指示使用哪种语言。

标签: 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;

    【讨论】:

    • 非常感谢您的帮助,我已经回过很多次了
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2015-07-05
    • 2012-04-27
    • 2015-01-03
    相关资源
    最近更新 更多