使用链表将元素压入堆栈
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
;
为什么将元素压入堆栈时 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
;