Java——链表(代码)

仅作记录…… 

interface ILink<E>{
	public void add(E e);
	public int size();
	public boolean isEmpty();
	public Object[] toArray();
	public void print();
	public E get(int index);
	public void set(int index,E data);
	public boolean contains(E data);
	public void remove(E data);
	public void clean();
}

class LinkImpl<E> implements ILink<E>{
	//-----------------------定义节点及节点的基本操作-----------------------
	private class Node{
		private E data;
		private Node next;
		public Node(E data){
			this.data = data;
		}
		//----节点的基本操作-----
		public void addNode(Node newNode){
			if(this.next == null){
				this.next = newNode;
			}else{
				this.next.addNode(newNode);
			}
		}
		
		public void toArrayNode(){
			LinkImpl.this.returnData[LinkImpl.this.foot++] = this.data;
			if(this.next != null){
				this.next.toArrayNode();
			}
		}
		
		public E getNode(int index){
			if(LinkImpl.this.foot++ == index){
				return this.data;
			}else{
				return this.next.getNode(index);
			}
		}
		
		public void setNode(int index,E data){
			if(LinkImpl.this.foot++ == index){
				this.data = data;
			}else{
				this.next.setNode(index,data);
			}
		}
		
		public boolean containsNode(E data){
			if(this.data.equals(data)){
				return true;
			}else{
				if(this.next == null){
					return false;
				}else{
					return this.next.containsNode(data);
				}
			}
		}
		
		public void removeNode(Node previous,E data){
			if(this.data.equals(data)){
				previous.next = this.next;
			}else{
				if(this.next != null){
					this.next.removeNode(this, data);
				}
			}
		}
	}
	//------------------------ILink类的成员-------------------------
	private Node root;
	private int count;
	private int foot;
	private Object[] returnData;
	//------------------------ILink类的方法-------------------------
	public void add(E e){
		if(e == null){
			return ;
		}
		Node newNode = new Node(e);
		if(this.root == null){
			this.root = newNode;
		}else{
			this.root.addNode(newNode);
		}
		this.count++;
	}
	
	public int size(){
		return this.count;
	}
	
	public boolean isEmpty(){
		return this.count == 0;
	}
	
	public Object[] toArray(){
		if(this.isEmpty()){
			return null;
		}
		this.foot = 0;
		this.returnData = new Object[this.count];
		this.root.toArrayNode();
		return returnData;
	}
	
	public void print(){
		Object[] result = this.toArray();
		for(Object obj : result){
			System.out.println(obj);
		}
	}
	
	public E get(int index){
		if(index >= this.count){
			return null;
		}
		this.foot = 0;
		return this.root.getNode(index);
	}
	
	public void set(int index,E data){
		if(index >= this.count){
			return ;
		}
		this.foot = 0;
		this.root.setNode(index,data);
	}
	
	public boolean contains(E data){
		if(data == null){
			return false;
		}
		return this.root.containsNode(data);
	}
	
	public void remove(E data){
		if(this.contains(data)){
			if(this.root.data == data){
				this.root = this.root.next;
			}else{
				this.root.next.removeNode(this.root,data);
			}
			this.count--;
		}
	}
	
	public void clean(){
		this.root = null;
		this.count = 0;
	}
}


public class LinkDemo{
	public static void main(String args[]){
		ILink<String> all = new LinkImpl<String>();
		all.add("Hello");
		all.add("World");
		all.add("Mldn");
		System.out.println("链表中的元素个数为:"+all.size());
		System.out.println("链表是否为空:"+all.isEmpty());
		System.out.println("-----------链表返回集合数据的分割线--------------");
		all.print();
		System.out.println("-----------根据索引取得数据的分割线--------------");
		System.out.println(all.get(2));
		System.out.println("-----------修改指定索引数据的分割线--------------");
		all.set(2,"世界");
		all.print();
		System.out.println("-----------判断数据是否存在的分割线--------------");
		System.out.println(all.contains("Hello"));
		System.out.println(all.contains("拜拜"));
		System.out.println("-----------删除链表指定数据的分割线--------------");
		all.remove("世界");
		all.print();
		System.out.println("-----------清空链表的分割线--------------");
		all.clean();
		System.out.println(all.size());
	}
}
发布了12 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41552756/article/details/103216819
今日推荐