`
liuheizi120
  • 浏览: 4056 次
社区版块
存档分类
最新评论

Java实现双向链表 求大神指点

    博客分类:
  • java
阅读更多
package com.angus.learn.list;



public class MyLinkedList<T> {
// private Node<T>[] nodes;
private int size;
private Node<T> head;
private Node<T> tail;
private Node<T> current;

// private double increamentRate;
// protected static final double DEFAULT_INCREAMENT_RATE=0.75;
// protected static final double DEFAULT_NODES_LENGTH=0.75;
public MyLinkedList() {

}

public void addToHead(T data) {
if (size == 0) {

Node<T> newNode = new Node<T>(data);
this.head = newNode;
this.tail = newNode;
size++;
} else {
Node<T> newNode = new Node<T>(data);
Node<T> oldHead = this.head;
newNode.setNextNode(oldHead);
oldHead.setPreNode(newNode);
this.head = newNode;
size++;
}
// return this.head;
}

public T getHead() {
return this.head.getData();
}

public void addToTail(T data) {
if (size == 0) {
Node<T> newNode = new Node<T>(data);
this.head = newNode;
this.tail = newNode;
size++;
} else {
Node<T> newNode = new Node<T>(data);
Node<T> oldTail = this.tail;
newNode.setPreNode(oldTail);
oldTail.setNextNode(newNode);
this.tail = newNode;
size++;
}
// return this.tail;
}

public T next() {
if (current == null) {
current = head;
return current.getData();
} else if (current == tail) {
return null;
} else {
current = current.getNextNode();

return current.getData();
}
}

public T pre() {
if (current == null) {
current = tail;
return current.getData();
} else if (current == head) {
return null;
} else {
current = current.getPreNode();

return current.getData();
}
}

public boolean isEmpty() {
return size == 0;
}

public boolean hasNext() {
if (isEmpty())
return false;

if (current == null)
return true;
if (current==tail)
return false;
return true;
}

public boolean hasPre() {
if (isEmpty())
return false;

if (current == null)
return true;
if (current==head)
return false;
return true;
}

public void print(){
System.out.print("[");
//boolean flag=true;
if(head!=null){
Node<T> node=head;
while(true){
System.out.print(node);
if(node.getNextNode()==null) break;
System.out.print("->");
node=node.getNextNode();
}
}
System.out.print(",current:"+current);
System.out.println("]");
}




public static void main(String[] args) {
test1();
test2();
test3();
test4();
}




public static void test1() {
MyLinkedList<String> m=new MyLinkedList<String>();
m.addToHead("5");
m.print();
m.addToHead("4");
m.print();
m.addToHead("3");
m.print();
m.addToHead("2");
m.print();
m.addToHead("1");
m.print();

System.out.println("================================test1结束================");
}

public static  void test2() {
MyLinkedList<String> m=new MyLinkedList<String>();
m.addToTail("1");
m.print();
m.addToTail("2");
m.print();
m.addToTail("3");
m.print();
m.addToTail("4");
m.print();
m.addToTail("5");
m.print();
System.out.println("================================test2结束================");
}

public  static void test3() {
MyLinkedList<String> m=new MyLinkedList<String>();
m.addToHead("5");
m.print();
m.addToHead("4");
m.print();
m.addToHead("3");
m.print();
m.addToHead("2");
m.print();
m.addToHead("1");
m.print();
System.out.println();
while(m.hasNext()){
m.next();
m.print();
}
System.out.println("================================test3结束================");
}
public static  void test4() {
MyLinkedList<String> m=new MyLinkedList<String>();
m.addToTail("1");
m.print();
m.addToTail("2");
m.print();
m.addToTail("3");
m.print();
m.addToTail("1");
m.print();
m.addToTail("4");
m.print();
m.addToTail("5");
m.print();
System.out.println();
while(m.hasPre()){
m.pre();
m.print();
}
System.out.println("================================test4结束================");
}

}
class Node<T> {
private Node<T> nextNode;
private Node<T> preNode;
private T data;


protected Node(T data){
this.data=data;
}


protected Node<T> getNextNode() {
return nextNode;
}


protected void setNextNode(Node<T> nextNode) {
this.nextNode = nextNode;
}


protected Node<T> getPreNode() {
return preNode;
}


protected void setPreNode(Node<T> preNode) {
this.preNode = preNode;
}


protected T getData() {
return data;
}


protected void setData(T data) {
this.data = data;
}


@Override
public boolean equals(Object obj) {
if(obj==null) return false;
if(obj instanceof Node){
if(this.data.equals(((Node) obj).data)){
return true;
}
}
return false;
}

@Override
public String toString() {
if(data==null) return null;
return data.toString();
}
}





测试结果:
[5,current:null]
[4->5,current:null]
[3->4->5,current:null]
[2->3->4->5,current:null]
[1->2->3->4->5,current:null]
================================test1结束================
[1,current:null]
[1->2,current:null]
[1->2->3,current:null]
[1->2->3->4,current:null]
[1->2->3->4->5,current:null]
================================test2结束================
[5,current:null]
[4->5,current:null]
[3->4->5,current:null]
[2->3->4->5,current:null]
[1->2->3->4->5,current:null]

[1->2->3->4->5,current:1]
[1->2->3->4->5,current:2]
[1->2->3->4->5,current:3]
[1->2->3->4->5,current:4]
[1->2->3->4->5,current:5]
================================test3结束================
[1,current:null]
[1->2,current:null]
[1->2->3,current:null]
[1->2->3->1,current:null]
[1->2->3->1->4,current:null]
[1->2->3->1->4->5,current:null]

[1->2->3->1->4->5,current:5]
[1->2->3->1->4->5,current:4]
[1->2->3->1->4->5,current:1]
[1->2->3->1->4->5,current:3]
[1->2->3->1->4->5,current:2]
[1->2->3->1->4->5,current:1]
================================test4结束================


















分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics