Java MyLinkedList 示例

本文展示了一个自定义实现的LinkedList类,包括基本的操作如添加、删除元素等,并实现了交集、并集、链接列表及排序等功能。通过具体示例演示了如何使用这个自定义的LinkedList。

注, 编译的sdk版本为java1.7

// 源代码。。

import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		MyLinkedList<Integer> myLinkedList = new MyLinkedList<Integer>();
		// cons
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		System.out.println("===============");
		// add 
		myLinkedList.add(0, new Integer(2));
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		myLinkedList.add(0, new Integer(1));
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		myLinkedList.add(2, new Integer(3));
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		myLinkedList.add(new Integer(4));
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		System.out.println("===============");
		// remove 
		myLinkedList.remove(8);
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		myLinkedList.remove(1);
		System.out.println("size : "+myLinkedList.size());
		System.out.println(myLinkedList);
		System.out.println("===============");
		// merge
		MyLinkedList<Integer> myLinkedList1 = new MyLinkedList<Integer>();
		myLinkedList1.add(new Integer(4));
		myLinkedList1.add(new Integer(3));
		myLinkedList1.add(new Integer(6));
		myLinkedList1.add(new Integer(5));
		System.out.println(myLinkedList.intersect(myLinkedList1));
		System.out.println(myLinkedList.union(myLinkedList1));
		System.out.println(myLinkedList.link(myLinkedList1));
		System.out.println("===============");
		// sort 
		System.out.println("before sort "+myLinkedList1);
		myLinkedList1.sort(new Comparator<Integer>(){
				@Override
				public int compare(Integer p1, Integer p2)
				{
					return p1.intValue() > p2.intValue() ? 1 : -1;
				}
		});
		System.out.println("after sort "+myLinkedList1);
		System.out.println("===============");
		// clean up
		myLinkedList.remove(2);
		System.out.println(myLinkedList);
		myLinkedList.removeAll();
		System.out.println(myLinkedList);
	}
}

class MyLinkedList<T> {
	private Node<T> headNode = new Node<T>();
	
	public MyLinkedList(){
		super();
	}
	
	public MyLinkedList(MyLinkedList<T> model){
		for(int i = 0; i < model.size(); i ++){
			this.add(model.get(i).data);
		}
	}
	
	public MyLinkedList(T[] models){
		for(T s : models)
			add(s);
	}
	
	public int size(){
		int n = 0;
		Node<T> p = this.headNode;
		while(p.hasNext()){
			n ++;
			p = p.next;
		}
		return n;
	}
	
	public T add(int index, T t){
		if(index < 0 || index > size())
			return null;
		if(index == 0){
			headNode.next = new Node<T>(t, headNode.next);
		}else{
			if(index == size()){
				get(size()-1).next = new Node<T>(t, null);
			}else{
				get(index).next = new Node<T>(t, get(index).next);
			}
		}
		return t;
	}
	
	public T add(T t){
		return add(size(), t);
	}
	
	public boolean remove(int index){
		if(index < 0 || index >= size())
			return false;
		if(index == 0){
			headNode.next = get(1);
		}else{
			if(size()-1 == index){
				get(index - 1).next = null;
			}else{
				get(index - 1).next = get(index).next;
			}
		}
		return true;
	}
	
	public void removeAll(){
		headNode.next = null;
	}
	
	public Node<T> get(int index){
		if(index < 0 || index >= size())
			return null;
		Node<T> ret = headNode;
		while(index-- >= 0)
			ret = ret.next;
		return ret;
	}
	
	public boolean contain(T t){
		for(int i = 0; i < size(); i ++){
			if(get(i).data.equals(t))
				return true;
		}
		return false;
	}
	
	public MyLinkedList<T> union(MyLinkedList<T> other){
		MyLinkedList<T> myLinkedList = new MyLinkedList<T>(this);
		for(int i = 0; i < other.size(); i ++){
			if(!contain(other.get(i).data))
				myLinkedList.add(other.get(i).data);
		}
		return myLinkedList;
	}
	
	public MyLinkedList<T> intersect(MyLinkedList<T> other){
		MyLinkedList<T> myLinkedList = new MyLinkedList<T>();
		for(int i = 0; i < other.size(); i ++)
			if(contain(other.get(i).data))
				myLinkedList.add(other.get(i).data);
		return myLinkedList;
	}
	
	public MyLinkedList<T> link(MyLinkedList<T> another){
		MyLinkedList<T> myLinkedList = new MyLinkedList<T>(this);
		for(int i = 0; i < another.size(); i ++)
			myLinkedList.add(another.get(i).data);
		return myLinkedList;
	}
	
	public void sort(Comparator<T> comp){
		for(int i = 0; i < size(); i ++)
			for(int j = 0; j < size() - i - 1; j ++)
				if(comp.compare(get(j).data, get(j + 1).data) > 0){
					Node<T> p0 = get(j);
					remove(j);
					add(j+1, p0.data);
				}
	}
	
	@Override
	public String toString(){
		String str = new String("Data :");
		Node<T> t = headNode;
		while(t.hasNext()){
			t = t.next;
			str += " " + t.toString();
		}
		if(t == headNode)
			str += " empty";
		return str;
	}
	
	class Node<T> {
		public T data = null;
		public Node<T> next = null;
		
		public Node(T data, Node<T> next){
			this.data = data;
			this.next = next;
		}
		
		public Node(Node<T> next){
			this.next = next;
		}
		
		public Node(T data){
			this.data = data;
		}
		
		public Node(){
			super();
		}
		
		public Node<T> nextNode(){
			return this.next;
		}
		
		public T getData(){
			return this.data;
		}
		
		public boolean hasNext(){
			return next == null ? false : true;
		}
		
		public String toString(){
			return this.data.toString();
		}
	}
}

// output

size : 0
Data : empty
===============
size : 1
Data : 2
size : 2
Data : 1 2
size : 3
Data : 1 2 3
size : 4
Data : 1 2 3 4
===============
size : 4
Data : 1 2 3 4
size : 3
Data : 1 3 4
===============
Data : 4 3
Data : 1 3 4 6 5
Data : 1 3 4 4 3 6 5
===============
before sort Data : 4 3 6 5
after sort Data : 3 4 5 6
===============
Data : 1 3
Data : empty


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值