public class singleLinkleList implements List{
private Node head = new Node();//头结点,不存储数据,为了编程方便
private int size;//一共有几个结点
@Override
public int size() {
return size;
}
@Override
public Object get(int i) {
Node p = head;
for(int j=0;j<=i;j++){
p = p.next;
}
return p.data;
}
@Override
public boolean isEmpty() {
return size!=0?true:false;
}
@Override
public boolean contains(Object e) {
Node p = head;
for(int i=0;i<size;i++){
p = p.next;
if(e.equals(p.data)){
return true;
}
}
return false;
}
@Override
public int indexOf(Object e) {
Node p = head;
for(int i=0;i<size;i++){
p = p.next;
if(e.equals(p.data)){
return i;
}
}
return 0;
}
@Override
public void add(Object e) {
this.add(size,e);
}
@Override
public void add(int i, Object e) {
//如果i的位置错误报异常
if(i<0||i>size){
throw new MyArrayIndexIutOfBoundsException("链表指针越界异常:"+i);
}
//从头开始找,从head结点开始找
Node p = head;
for(int j=0;j<i;j++){
p = p.next;
}
//新建一个结点
Node newNode = new Node();
newNode.data=e;
//指明所结点的值直接后继结点
//指明所结点的直接前驱结点
p.next = newNode;
//size++
size++;
}
@Override
public void clear() {
/*
Node p = head;
Node c = null;
for(int j=0;j<size;j++){
p.data=null;
c = p;
p=p.next;
c.next = null;
}
size=0;
*/
for(Node p=head;p!=null;){
Node c = p.next;
p.data=null;
p.next=null;
p=c;
}
head = null;
size=0;
}
@Override
public Object remove(int i) {
if(i<0||i>size){
throw new MyArrayIndexIutOfBoundsException("链表指针越界异常:"+i);
}
Node p = head;
for(int j=0;j<=i-1;j++){
p = p.next;
}
Node c = p;
Node remove =p.next;
c.next = remove.next;
Object obj = remove.data;
remove.data=null;
remove.next=null;
size--;
return obj;
}
@Override
public Object set(int i, Object e) {
Node p = head;
for(int j=0;j<=i;j++){
p = p.next;
}
Object c = p.data;
p.data = e;
return c;
}
@Override
public Object[] toarray() {
Object[] obj = new Object[size];
Node p = head;
for(int i=0;i<size;i++){
p = p.next;
obj[i] = p.data;
}
return obj;
}
@Override
public String toString() {
if(size==0){
return "[]";
}
StringBuilder builder = new StringBuilder("[");
Node p = head.next;
for(int i=0;i<size;i++){
if(i!=size-1){
builder.append(p.data+",");
}else{
builder.append(p.data).append("]");
}
//移动指针到下一个结点
p = p.next;
}
return builder.toString();
}
}
本文只实现了单链表的部分功能!