您的位置:首页 > 编程语言 > Java开发

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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: