数据结构Linked Array的简单实现
Lindked 单向链的基本实现。有的地方没有将对象释放,会导致一直占用。
Node
public class Node {
Object data;
Node next;
}
LinkedDemo
public class LinkedDemo {
private Node head = new Node();
private Integer size = 0;
public void add(Object a){
Node node = new Node();
node.data = a;
Node p = head;
for(int i=1;i<=size;i++){
p = p.next;
}
p.next = node;
size++;
}
public void add(int a,Object b){
//异常处理
checkRangeAdd(a);
Node node = new Node();
node.data = b;
Node p = head,q;
for(int i=1; a<=size;i++){
p=p.next;
}
q=p.next;
p.next = node;
node.next=q;
size++;
}
private void checkRangeAdd(int index){
if(index>=size || index<0)
throw new IndexOutOfBoundsException();
}
public void addFirst(Object obj){
Node node = new Node();
node.data=obj;
Node p = head;
p=head.next;
head.next=node;
node.next=p;
size++;
}
public void remove(int index){
checkRangeAdd(index);
Node p = head;
for(int i=1; i<= index; i++){
p=p.next;
}
p.next = p.next.next;
size--;
}
public String toString(){
if (size == 0)
return "[]";
StringBuffer s = new StringBuffer("[");
Node p = head;
for (int i = 0; i < size - 1; i++)
{
p = p.next;
s.append(p.data + ",");
}
p = p.next;
s.append(p.data + "]");
return s.toString();
}
public void remove(Object obj){
for(Node p=head;p.next !=null ; p=p.next){
Node q = p.next;
if(obj == null ? q.data== null :obj.equals(q.data)){
size--;
p.next = p.next.next;
break;
}
}
}
public Object get(int index){
checkRangeAdd(index);
Node p = head;
for(int i=1;i<=index;i++){
p = p.next;
}
return p.data;
}
public void set(int index,Object obj){
checkRangeAdd(index);
Node p = head;
for(int i=1;i<=index;i++){
p = p.next;
}
p.data = obj;
}
//反转 头尾调换
public void reverse(){
Node tmp;
Node p = head.next;
Node q = head.next.next;
while(q!=null){
tmp = q.next;//反转前将后续的结点先保留下来
q.next = p;//反转
p = q;
q = tmp;
}
head.next = p;
}
public int size(){
return size;
}
public static void main(String[] args) {
LinkedDemo ld = new LinkedDemo();
ld.add(1);
ld.add(2);
ld.add(3);
ld.add(4);
ld.remove(2);
System.out.println(ld);
}
}
浙公网安备 33010602011771号