向一个栈顶指针为 $hs$ 的链式栈中插入一个指针 $s$ 指向的结点时,应执行( )。
链式栈本质就是链表头部插入,先让新节点 s 指向原栈顶 hs,再把栈顶指针 hs 指向 s,两步顺序绝对不能反。
先改 hs 再连 s 就丢失了原栈顶;A 选项把原栈顶的 next 改为 s 会形成环且没更新 hs;C 是插在第二个位置;D 把 hs 后移了。核心就是两步顺序:s->next=hs; hs=s。
这道题考查链式栈的 push 操作。
链式栈是用链表实现的栈。栈顶指针 hs 指向链表的头节点。每次 push 都在链表头部插入新节点,pop 从头部删除。因此,向链式栈插入新结点,本质上就是在链表头部插入一个结点。链表头插的核心是:先让新结点的 next 指向原头结点,再更新头指针指向新结点,顺序不能反。
命题人喜欢考“两步顺序”这个细节:
s->next = hs; hs = s;hs = s; s->next = hs;(会丢失原头结点)hs->next = s;(形成环且栈顶没动)hs = hs->next;(栈顶后移)