这几天工作量不大,写了一个双向链表的实现。
在linkedlist中,每一个元素所存放的位置都可以理解成一个特殊结构的节点,这个节点分为三个部分:1.前一个节点是谁,自己,后一个节点是谁.
直接上干货
package myLinkedList;
public class MyLinkedList {
private Node firstNode;
private Node lastNode;
private int size;
/**
* @Chunf
* add an element with index
* @param obj
*/
public void add(Object obj){
Node n = new Node();
if(firstNode==null){
n.setPrevious(null);
n.setObj(obj);
n.setNext(null);
firstNode = n;
lastNode = n;
}else{
n.setPrevious(lastNode);
n.setNext(null);
n.setObj(obj);
lastNode.setNext(n);
lastNode = n;
}
size++;
}
/**
*@author Chunf
*
*return counts of the elements in this collection
*/
public int size(){
return size;
}
/**
* @Chunf
* get an element
* @param obj
*/
public Object get(int index){
if(firstNode==null){
return null;
}else{
if(index==0){
return firstNode.getObj();
}else{
Node node = firstNode;
Object res = null;
for(int i=1;i<=index;i++){
res = node.getNext().getObj();
node = node.getNext();
}
return res;
}
}
}
public void remove(int index){
Node node = null;
if(index==0){
node = firstNode;
}else{
Node temp = firstNode;
Node res = null;
for(int i=1;i<=index;i++){
res = temp.getNext();
temp = temp.getNext();
}
node = res;
}
Node previousNode = node.getPrevious();
Node nextNode = node.getNext();
previousNode.setNext(nextNode);
nextNode.setPrevious(previousNode);
size--;
}
/**
*
* @author Chunf
*
* @Time 2015年8月25日
*/
class Node{
private Node previous;
private Object obj;
private Node next;
public Node getPrevious() {
return previous;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
}
}