栈的属性大家都知道,先进后出FILO。要求用单链表实现栈,弹出和添加元素时间复杂度为O(1)。话不多说,上代码。
public class MyStack{
private ListNode head;
private int size;
public MyStack(){
this.size=0;
}
public void push(int value){
ListNode last=head;
head=new ListNode(value);
head.next=last;
size++;
}
public int pop(){
if(head==null){
return -1;
}
int val=head.val;
head=head.next;
size--;
return val;
}
public int peek() {
return head.val;
}
public boolean isEmpty(){
return size<=0;
}
public int size(){
return size;
}
}
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
}
}
下面用单链表实现队列,队列的属性先进先出FIFO 。
public class MyQueue{
private int size;
private ListNode head;
private ListNode tail;
public MyQueue(){
this.size=0;
}
public void add(int value){
ListNode node=new ListNode(value);
if(head==null){
head=node;
tail=node;
}else{
tail.next=node;
tail=node;
}
size++;
}
public int poll(){
if(head==null){
return -1;
}
int val=head.val;
head=head.next;
if(head==null){
tail=null;
}
size--;
return val;
}
public boolean isEmpty() {
return size <= 0;
}
public int size() {
return size;
}
}
队列需要两个ListNode,分别抓住头节点和尾节点,尾节点添加,头节点弹出。