java 链表实现线性表

Node可以用内部类实现,用内部类实现时和以单独的类是实现时的区别要注意	
public class Node<T> {
private T data;Node<T> next;Node(T dataPortion) {data = dataPortion;next = null;}Node(T dataPortion, Node<T> nextNode) {data = dataPortion;next = nextNode;}public T getData() {return data;}public void setData(T data) {this.data = data;}public Node<T> getNext() {return next;}public void setNext(Node<T> next) {this.next = next;}}

public interface ListInterface<T>{
	public boolean add(T newEntry);

	public boolean add(int newPosition, T newEntry);

	public T remove(int givenPosition);

	public void clear();

	public T set(int givenPosition, T newEntry);

	public T get(int givenPosition);

	public boolean contains(T anEntry);

	public int size();

	public boolean isEmpty();

	public boolean isFull();

	public void display();
}

import java.util.LinkedList;

public class LLlist<T> implements ListInterface<T> {
	private Node<T> firstNode;
	private int length;

	public LLlist() {
		clear();
	}

	private Node<T> getNodeAt(int givenPosition) {
		Node<T> currentNode = firstNode;
		if (!isEmpty() && givenPosition >= 0 && givenPosition < length) {
			for (int i = 0; i < givenPosition; i++) {
				currentNode = currentNode.getNext();
			}
		} else {
			currentNode = null;
		}
		return currentNode;
	}

	@Override
	public boolean add(T newEntry) {
		// TODO Auto-generated method stub
		Node<T> newNode = new Node<T>(newEntry);
		if (isEmpty()) {
			firstNode = newNode;
		} else {
			Node<T> lastNode = getNodeAt(length - 1);
			lastNode.setNext(newNode);

		}
		length++;
		System.out.println("add : " + newEntry);
		return true;
	}

	@Override
	public boolean add(int newPosition, T newEntry) {
		// TODO Auto-generated method stub
		boolean isAdd = true;

		if (newPosition >= 0 && newPosition <= length) {
			Node<T> newNode = new Node<T>(newEntry);
			if (isEmpty() || newPosition == 0) {
				newNode.setNext(firstNode);
				firstNode = newNode;
			} else {
				Node<T> before = getNodeAt(newPosition - 1);
				Node<T> after = before.getNext();
				newNode.setNext(after);
				before.setNext(newNode);
			}
			length++;
		} else
			isAdd = false;
		return isAdd;
	}

	@Override
	public T remove(int givenPosition) {
		// TODO Auto-generated method stub
		T result = null;
		if (!isEmpty() && givenPosition >= 0 && givenPosition < length) {
			if (givenPosition == 0) {
				result = firstNode.getData();
				firstNode = firstNode.getNext();
			} else {
				Node<T> before = getNodeAt(givenPosition - 1);
				Node<T> remove = before.getNext();
				Node<T> after = remove.getNext();
				before.setNext(after);
				result = remove.getData();
			}
			length--;
		} else {
			System.out.println("删除出错");
		}
		return result;
	}

	@Override
	public void clear() {
		// TODO Auto-generated method stub
		firstNode = null;

		length = 0;
	}

	@Override
	public T set(int givenPosition, T newEntry) {
		// TODO Auto-generated method stub
		T old = null;
		if (!isEmpty() && givenPosition >= 0 && givenPosition < length) {
			Node<T> oldNode = getNodeAt(givenPosition);
			old = oldNode.getData();
			oldNode.setData(newEntry);
		} else {
			System.out.println("设置出错");
		}
		return old;
	}

	@Override
	public T get(int givenPosition) {
		// TODO Auto-generated method stub
		T result = null;
		if (!isEmpty() && givenPosition >= 0 && givenPosition < length)
			result = getNodeAt(givenPosition).getData();
		return result;
	}

	@Override
	public boolean contains(T anEntry) {
		// TODO Auto-generated method stub
		boolean isContain = false;
		Node<T> currentnNode = firstNode;
		while (!isContain && currentnNode != null)
		{
			if (anEntry.equals(currentnNode.getData())) {
				isContain = true;
				System.out.println("包含该元素");
			} else {
				currentnNode = currentnNode.getNext();
				
			}

		}
		if(isContain==false)System.out.println("不包含该元素");
		return isContain;
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		System.out.println("size :  " + length);
		return length;
	}

	@Override
	public boolean isEmpty() {
		// TODO Auto-generated method stub
		boolean result;
		if (length == 0 && firstNode == null) {
			result = true;
		} else {
			result = false;
		}
		return result;
	}

	@Override
	public boolean isFull() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void display() {

		// TODO Auto-generated method stub
		Node<T> currentNode = firstNode;
		System.out.print("The list : ");
		while (currentNode != null) {
			System.out.print(currentNode.getData() + "  ");
			currentNode = currentNode.getNext();
		}
		System.out.println();
	}

	/**
	 * @param argv
	 */
	public static void main(String[] argv) {
		LLlist<Integer> list = new LLlist<Integer>();
		list.display();
		list.add(5);
		list.add(6);
		list.add(1);
		list.add(2);
		list.add(3);
		list.size();
		list.display();
		list.remove(2);
		list.display();
		list.remove(7);
		list.display();
		list.size();
		list.add(0, 1);
		list.display();
		list.add(4, 5);
		System.out.println(list.firstNode.getData());
		list.display();
		list.add(3, 2);
		System.out.println(list.firstNode.getData());
		list.display();
		System.out.println(list.set(0, 2));
		System.out.println(list.set(1, 3));
		System.out.println(list.firstNode.getData());
		list.display();
		System.out.println(list.get(0));
		System.out.println(list.get(1));
		 list.contains(2);
		 list.contains(1);
		list.display();
		System.out.println(list.getNodeAt(6).getNext());
		System.out.println(list.firstNode.getData());
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值