版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35529801/article/details/79857374
package hjj.stack;
public class MyLinkedStack<T> {
private int size;
private Node first;
private Node last;
public boolean push(T obj) {
if(size == 0) {
Node node = new Node();
node.obj = obj;
node.previous = null;
node.next = null;
first = node;
last = node;
} else {
Node node = new Node();
node.obj = obj;
node.previous = last;
last.next = node;
last = node;
}
size++;
return true;
}
public T pop() {
if(size == 0) {
throw new RuntimeException("已经没有了");
}
Node lastNode = last;
Node node = last.previous;
if(size == 1) {
first.next = null;
size--;
return (T)first.obj;
}
last.previous = null;
last = node;
last.next = null;
size--;
return (T)lastNode.obj;
}
public int indexOf(T obj) {
Node node = first;
for(int i=0; i<size; i++) {
if(node.obj.equals(obj)) {
return i;
}
node = node.next;
}
return -1;
}
public T get(int index) {
if(index >= size) {
throw new RuntimeException("数组越界");
}
Node node = first;
for(int i=0; i<index; i++) {
node = node.next;
}
return (T)node.obj;
}
public void clear() {
first = null;
last = null;
}
public int size() {
return size;
}
//节点
private class Node {
public Object obj;
public Node previous;
public Node next;
}
}