JAVA—手写单链表
LIst接口
public interface List {
public int size();
public Object get(int i);
public boolean isEmpty();
public boolean contains(Object e);
public int indexOf(Object e);
public void add(int i, Object e);
public void add(Object e);
public boolean addBefore(Object obj, Object e);
public boolean addAfter(Object obj, Object e);
public Object remove(int i);
public boolean remove(Object e);
public Object replace(int i, Object e);
public Iterator iterator();
}
Node结点
public class Node {
public Object data;
public Node next;
public Node() {
}
public Node(Object data) {
this.data = data;
}
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
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;
}
}
SingleLinkedList类
public class SingleLinkedList 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 index = 0; index <= i;index++){
p = p.next;
}
return p;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public boolean contains(Object e) {
return false;
}
@Override
public int indexOf(Object e) {
return 0;
}
@Override
public void add(int i, Object e) {
Node previousNode = head;
if (i > 0){
previousNode = (Node) get(i-1);
}
Node newNode = new Node(e);
newNode.next = previousNode.next;
previousNode.next = newNode;
size++;
}
@Override
public void add(Object e) {
add(size,e);
}
@Override
public boolean addBefore(Object obj, Object e) {
return false;
}
@Override
public boolean addAfter(Object obj, Object e) {
return false;
}
@Override
public Object remove(int i) {
Node previousNode = head;
if (i > 0){
previousNode = (Node) get(i-1);
}
Node currentNode = previousNode.next;
previousNode.next = currentNode.next;
currentNode.next = null;
size--;
return null;
}
@Override
public boolean remove(Object e) {
return false;
}
@Override
public Object replace(int i, Object e) {
return null;
}
@Override
public Iterator iterator() {
return null;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
Node p = head;
for (int index = 0; index < size;index++){
p = p.next;
if (index == size - 1){
sb.append(p.data);
}else {
sb.append(p.data + ",");
}
}
sb.append("]");
return sb.toString();
}
}