闲来无事,写个单链表
package cn;
/**
* @author admin
*/
public class MyLinkedList<E> extends MyAbstractList {
private Node<E> first;
private static class Node<E>{
E element;
Node<E> next;
public Node(E element, Node<E> next) {
this.element = element;
this.next = next;
}
}
@Override
public void clear() {
this.size=0;
this.first=null;
}
@Override
public Object get(int index) {
return node(index).element;
}
@Override
public Object set(int index, Object element) {
Node node=node(index);
Object old=node.element;
node.element=element;
return old;
}
@Override
public void add(int index, Object element) {
if(index==0){
this.first=new Node<E>((E) element,first);
}else {
Node<E> prveious=node(index-1);
prveious.next=new Node<E>((E) element,prveious.next);
}
this.size++;
}
@Override
public Object remove(int index) {
rangeCheck(index);
Object old=null;
if(index==0){
old=this.first.element;
this.first=first.next;
}else{
Node<E> prve=node(index-1);
old=prve.next.element;
prve.next=prve.next.next;
}
size--;
return old;
}
@Override
public int indexOf(Object element) {
if(element==null){
Node<E> node=first;
for(int i=0;i<this.size;i++){
if(node.element==null){
return i;
}
node=node.next;
}
}else {
Node<E> node=first;
for(int i=0;i<this.size;i++){
if(node.element.equals(element)){
return i;
}
node=node.next;
}
}
return -1;
}
/**
* 获取index位置元素
* @param index
* @return
*/
private Node<E> node(int index){
rangeCheck(index);
Node<E> node=first;
for (int i = 0; i < index; i++) {
node=node.next;
}
return node;
}
@Override
public String toString() {
StringBuffer str=new StringBuffer("{");
Node<E> node=first;
for(int i=0;i<this.size;i++){
if(node!=null){
str.append(node.element+"->");
}
node=node.next;
}
return str.toString()+"}";
}
}
懂的都懂,不懂也没办法