package com.link;
public class LinkedList<T> {
LinkNode<T> header = null;
LinkNode<T> last = null;
public LinkNode<T> getFirstNode(){
return header;
}
public LinkNode<T> getLastNode(){
return last;
}
public T getHeaderValue() {
return header.getNodeValue();
}
public T getTailValue() {
return last.getNodeValue();
}
int size = 0;
/**
* 追加元素,从最后一个元素追加
* @param t 要追加的元素
*/
public void add(T t){
LinkNode<T> n = new LinkNode<T>();
n.setNodeValue(t);
if(header == null){
header = n;
last = n;
}
header.setPreviousNode(n);
n.setNextNode(header);
n.setPreviousNode(last);
last.setNextNode(n);
last = n;
size++;
}
/**
* 添加元素
* @param t 要添加的对象
* @param index 索引,从0开始
* @throws Exception
*/
public void add(T t,int index) throws Exception{
LinkNode<T> nodeNext = getElement(index);
LinkNode<T> node = nodeNext.getPreviousNode();
LinkNode<T> newNode = new LinkNode<T>();
newNode.setNodeValue(t);
nodeNext.setPreviousNode(newNode);
node.setNextNode(newNode);
newNode.setNextNode(nodeNext);
newNode.setPreviousNode(node);
if(index == 0){
header = newNode;
}
size++;
}
/**
* 根据索引移除元素
* @param index 要移除元素的索引
* @throws Exception
*/
public void remove(int index) throws Exception{
LinkNode<T> currenNode = getElement(index);
LinkNode<T> previousNode = currenNode.getPreviousNode();
LinkNode<T> nextNode = currenNode.getNextNode();
previousNode.setNextNode(nextNode);
nextNode.setPreviousNode(previousNode);
if(index == 0){
header = nextNode;
}
if(index == size -1){
last = previousNode;
}
currenNode = null;
size--;
}
/**
* 根据索引获取节点元素
* @param index
* @return
* @throws Exception
*/
public LinkNode<T> get(int index) throws Exception{
return getElement(index);
}
public int getSize(){
return size;
}
/**
* 清除所有元素
*/
public void clear(){
LinkNode<T> node = header.getNextNode();
while (node != header) {
LinkNode<T> next = node.getNextNode();
node.setNextNode(null);
node.setPreviousNode(null);
node.setNodeValue(null);
node = next;
}
header.setNextNode(null);header.setPreviousNode(null);
header.setNodeValue(null);
header = null;
size = 0;
}
private LinkNode<T> getElement(int index) throws Exception{
LinkNode<T> node = null;
if(index < size && index > -1){
node = header;
for(int i = 1; i <= index;i++){
node = node.getNextNode();
}
return node;
}else{
throw new Exception("超出索引");
}
}
}
package com.link;
public class LinkNode <T> {
private LinkNode <T> previousNode= null;
private LinkNode <T> nextNode = null;
private T nodeValue = null;
public LinkNode<T> getPreviousNode() {
return previousNode;
}
public void setPreviousNode(LinkNode<T> previousNode) {
this.previousNode = previousNode;
}
public LinkNode<T> getNextNode() {
return nextNode;
}
public void setNextNode(LinkNode<T> nextNode) {
this.nextNode = nextNode;
}
public T getNodeValue() {
return nodeValue;
}
public void setNodeValue(T nodeValue) {
this.nodeValue = nodeValue;
}
}
测试
package com.link;
import java.util.TreeSet;
import com.baike.bean.UserInfo;
public class LinkListTest {
public static void main(String[] args) throws Exception {
Integer i =0;
UserInfo u = new UserInfo();
LinkedList _u = new LinkedList();
_u.add(1);
_u.add(2);
_u.add(3);
_u.add(4);
_u.add(5);
_u.add(6);
_u.add(7);
// _u.remove(6);
System.out.println("--------------------list--------------------------");
for(int j =0 ;j<_u.getSize();j++){
System.out.println(_u.get(j).getNodeValue() +"pre:"+_u.get(j).getPreviousNode().getNodeValue()+"next:"+_u.get(j).getNextNode().getNodeValue());
}
System.out.println("---------------------add-------------------------");
_u.add(8, 6);
System.out.println(_u.get(6).getNodeValue());
System.out.println("--------------------list--------------------------");
for(int j =0 ;j<_u.getSize();j++){
System.out.println(_u.get(j).getNodeValue() +"pre:"+_u.get(j).getPreviousNode().getNodeValue()+"next:"+_u.get(j).getNextNode().getNodeValue());
}
System.out.println("----------------------------------------------");
java.util.LinkedList inti = new java.util.LinkedList();
inti.add(1);
inti.add(2);
inti.add(3);
inti.add(3);
inti.add(3);
inti.add(1,4);
Object o =3;
inti.remove(o);
System.out.println(inti.get(1));
for(int j =0 ;j<inti.size();j++){
System.out.println(inti.get(j));
}
}
}