笔试代码题--用单链表实现栈
栈的特点是先进先出,所以在实现入栈的时候就是实现头链表的头插。
栈顶直接返回头结点的next.
出栈将头结点指向头结点的next的next。
注意在出栈之后,释放结点,应该先保存该结点,然后delete,防止悬空指针。
代码如下:
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;//用单链表实现栈
class my_stack
{typedef struct ListNode {int val;struct ListNode *next;ListNode() : next(NULL) {}}ListNode;
public:my_stack(){headnode=new ListNode();//headnode=nullptr;headnode->next=nullptr;}void push(int val){ListNode* newnode=new ListNode ;newnode->val = val;newnode->next = headnode->next;headnode->next = newnode;}ListNode* top(){return headnode->next;}void pop(){if(headnode->next==nullptr) return;else {ListNode* node=headnode->next;headnode->next=headnode->next->next; delete node;}}
ListNode* headnode;
};int main()
{my_stack Stack;Stack.push(1);Stack.push(3);Stack.push(2);Stack.push(5);Stack.push(4);Stack.pop();cout<<Stack.top()->val<<endl;//system("pause");return 0;
}