java 链表实现线性表
2013-04-29 21:50
309 查看
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()); } }
相关文章推荐
- java 用链表实现线性表
- java实现链表线性表
- 线性表--双链表实现方式 (JAVA)
- Java实现链表,线性表
- 大话数据结构(二)——线性表链式存储结构(单链表)的java实现
- 线性表 及Java实现 顺序表、链表、栈、队列
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- JAVA实现具有迭代器的线性表(单链表)
- 线性表 及Java实现 顺序表、链表、栈、队列
- 数据结构(二)--- 线性表链表(单链表)java实现方式
- Java 实现链表的插入,遍历
- Java实现两个有序链表的合并
- Java语言解决约瑟夫环问题(链表实现)
- java_实现链表以及链表的测试类
- 单链表反转的两种实现(Java)
- 用java手动实现一个链表的增删改查
- Java实现链表结构
- java 用动态数组实现线性表
- java实现单向链表
- Java实现-翻转链表2