JAVA双向链表的一些简单接口实现

        如果想要保存多个对象,我们可以用对象数组,想要保存多个任意对象,可以用Object型的数组,但是,数组是一个定长的线性结构,一旦我们内容过多或过少,都有可能造成空间的浪费,所以,我们就定义一个不固定长度的数组,有多少数据就保存多少数据,下面是用JAVA实现的双向链表节点结构

   

package www.bit.java;

interface Link{
	boolean Add(Object obj);  //增加结点
	boolean remove(int index); //删除结点
	int length();    //获取长度
	int contains(Object obj);  //查看结点是否存在
	Object[] toArrary(); //获取结点
    boolean set(int index,Object newElement);  //改变结点数据
	Object get(int intdex);  //根据索引查找
	void clear();	  //清空链表
	void printLink(); //打印链表
}
class LinkImpl implements Link{
	   private Node first;
	   private Node last;
	   private int size=0;
       private class Node{
    	 private Node per;
    	 private Object data;
    	 private Node next;
		private Node(Node per, Object data, Node next) {
			super();
			this.per = per;
			this.data = data;
			this.next = next;
		} 
     }

	public int getSize() {
		return this.size;
	}
	@Override
	public boolean Add(Object obj) {
		Node temp=this.last;
		Node newNode=new Node(temp, obj, null);
		if(this.first==null) {
			this.first=newNode;
			this.last=newNode;
		}else {
			temp.next=newNode;
			this.last=newNode;
		}
		this.size++;
		return true;
		
	}

	@Override
	public boolean remove(int index) {
		if(!isIndex(index))
			return false;
		//Node node=node(index);
		if(index==0) {
			if(this.first==this.last) {
				this.first=null;
				this.last=null;
				this.size--;
				return true;
			}
			Node temp=this.first;
			this.first=temp.next;
			temp.next=null;
			this.first.per=null;
			this.size--;
			return true;
		}else if(index==size-1) {
			Node temp1=this.last;
			this.last=temp1.per;
			temp1.per=null;
			this.last.next=null;
			this.size--;
			return true;
		}
		Node temp=this.first;
		for(int i=0;i<index;i++) {
			temp=temp.next;
		}
		temp.next.per=temp.per;
		temp.per.next=temp.next;
		temp.next=null;
		temp.per=null;
		this.size--;
		return true;
	}

	@Override
	public int length() {
		return this.size;
	}

	@Override
	public int contains(Object obj) {
		int index=0;
		Node temp;
		if(obj==null) {
			for(temp=this.first;temp!=null;temp=temp.next) {
				if(temp.data==null)
					return index;
			        index++;
			}
		}else {
			for(temp=this.first;temp!=null;temp=temp.next) {
				if(temp.data==obj)
					return index;
				   index++;
		  }	
		}
		return -1;
	}

	@Override
	public Object[] toArrary() {
		Object[] result=new Object[this.size];
		int i=0;
		for(Node temp=first;temp!=null;temp=temp.next) {
			result[i++]=temp.data;
		}
		return  result;
	}

	@Override
	public boolean set(int index, Object newElement) {
	    if(!isIndex(index))
	    	return false;

	    Node cur=this.first;
	     for(int i=0;i<index;i++) {
	    	 cur=cur.next;
	     }
	     cur.data=newElement;
	     return true;
	}

	@Override
	public Object get(int intdex) {
		if(!isIndex(intdex))
			return null;
		
		if(intdex > this.size/2)
		{
			int i=size-1;
			Node temp=this.last;
			for(i=size-1;i < intdex;i-- ) {
				temp=temp.per;
			}
			return temp.data;
		}else if(intdex < this.size/2) {
			int i=0;
			Node temp=this.first;
			for(i=0;i<intdex;i++) {
				temp=temp.next;
			}
			return temp.data;
		}
		return null;
	}
	private boolean isIndex(int index) {
		return (index >= 0) && (index < this.size);
	}
	@Override
	public void clear() {
		  Node temp,temp1;
		for(temp=this.first;temp!=null;temp=temp1.next) {
			temp1=temp;
			temp.next=null;
			temp.per=null;
		}
		this.size=0;
		this.first=this.last=null;
	}

	@Override
	public void printLink() {
		Object[] result=this.toArrary();
		for(Object obj:result)
		{
			System.out.println(obj);
		}
	}
}
public class Test{
	public static void main(String[] args) {
		Link link=new LinkImpl();
		link.Add("火车头");
		link.Add("车厢1");
		link.Add("车厢2");
		link.Add("车厢3");
		link.printLink();
		System.out.println(link.length());
		System.out.println("Add********************");
		System.out.println(link.contains("火车头"));
		System.out.println(link.contains("车厢2"));
		System.out.println(link.contains("车厢3"));
		System.out.println(link.contains("车厢4"));
		System.out.println("Find*******************");
		System.out.println(link.get(0));
		System.out.println(link.get(1));
		System.out.println(link.get(3));
		System.out.println(link.get(4));
		System.out.println("Get*********************");
		System.out.println(link.set(0, "新加车厢"));
		System.out.println(link.set(3, "新加车厢3"));
		System.out.println(link.set(2, "新加车厢2"));
		link.printLink();
		System.out.println(link.length());
		System.out.println("Set**********************");
		System.out.println(link.remove(0));
		System.out.println(link.remove(2));
		System.out.println(link.remove(3));
		link.printLink();
		System.out.println(link.length());
		System.out.println("Remove*********************");
		System.out.println(link.set(0, "新加车厢"));
		System.out.println(link.set(3, "新加车厢"));
		System.out.println(link.remove(0));
		System.out.println(link.remove(1));
		link.printLink();
		System.out.println(link.length());
	    System.out.println("****************************");
		System.out.println(link.contains("火车头"));
	

		link.printLink();
		System.out.println(link.length());
		link.clear();
		link.printLink();
		System.out.println("******************");
		System.out.println(link.length());
		link.printLink();
	}
}

 

猜你喜欢

转载自blog.csdn.net/eternal_01/article/details/79936550
今日推荐