要实现LinkedList,首先理解LinkedList的底层数据结构是链表,直白的说是一个双向链表,双向链表本身前继域和后继域还有数据本身所在区域。
Node类:
/**
* 定义节点
*/
public class Node {
Node previous; //前继,指向前一个Node
Object data; //节点数据
Node next; //后继,指向后一个Node
/**
* 无参构造方法
*/
public Node() {
}
/**
* 有参构造方法
*/
public Node(Node previous, Object data, Node next) {
super();
this.previous = previous;
this.data = data;
this.next = next;
}
/**
* 前继
*/
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
/**
* 数据
*/
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
/**
* 后继
*/
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
MyLinkedList类:
public class MyLinkedList {
/**
* 首节点
/
private Node first;
/*
* 尾节点
/
private Node last;
/*
* 链表长度
*/
private int size;
public MyLinkedList() {
first = null;
last = null;
size = 0;
}
public void add(Object obj) {
Node n = new Node();
if (first == null) { //当first=null则说明LinkedList中没有一个节点
n.setNext(null);
n.setData(obj);
n.setPrevious(null);
first = n;
last = n; //第一个节点和最后一个节点都是node
} else {
n.setPrevious(last);
n.setData(obj);
n.setNext(null);
last.setNext(n); //当前节点变为末尾节点
last = n;
}
size++;
}
public int size() {
return size;
}
public Node get(int index) {
Node temp = null;
if (first != null) {
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
}
return temp;
}
public void remove(Object obj) {
Node node = first;
if(obj==null){
while(node!=null){
if(node.data==null){
removefast(node);
}
node = node.next;
}
}else {
while(node!=null){
if(obj.equals(node.data)){
removefast(node);
}
node = node.next;
}
}
}
private void removefast(Node node){
node.previous.next=node.next;
size--;
node.data=null;
node.previous = node.next = null;
}
public Object set(int index,Object obj) {
//先获取index位置原本的数据
get(index);
Node node = get(index);
Object oldObject=node.data;
node.data = obj;
return oldObject;
}
public void show() {
for (int i = 0; i < size() ; i++) {
System.out.print(get(i).data+" ");
}
System.out.println();
}
public static void main(String[] args) {
MyLinkedList list = new MyLinkedList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.show();
list.remove("c");
list.show();
System.out.println(list.get(2).data);
list.show();
list.set(1,"v");
list.show();
}
}