双链表的操作2:返回指定位置的节点数据
package shuanglianbiao;
import org.omg.Messaging.SyncScopeHelper;
public class Doublelink<E> {
public Node<E> first;
private Node<E> last;
private int size;
private class Node<E>{
private Node<E> prev;
private E item;
private Node<E> next;
public Node() {
}
public Node(Node<E> prev, E item, Node<E> next) {
this.prev = prev;
this.item = item;
this.next = next;
}
}
private void linkFirst(E e){
Node<E> f =first;
Node<E> newNode = new Node<E>(null,e,f);
first = newNode;
if (f==null){
last = newNode;
}else {
f.prev = newNode;
newNode.next = f;
}
size++;
}
private void linkLast(E e){
Node<E> l = last;
Node<E> newNode = new Node<E>(l,e,null);
last = newNode;
if (l==null){
first = newNode;
}else {
l.next = newNode;
newNode.prev = l;
}
size++;
}
public void addFirst(E e){
linkFirst(e);
}
public void addLast(E e){
linkLast(e);
}
public void print(Node<E> e){
if (e!=null){
System.out.print(e.item+"-----");
if (e.next!=null){
this.print(e.next);
}
}
}
public void checkElement(int index){
if (index<0||index>=size){
throw new IndexOutOfBoundsException("index:"+index+",size:"+size);
}
}
private Node<E> node(int index){
if (index<=(size/2)){
Node<E> f = first;
for (int i = 0;i<index;i++){
f = f.next;
}
return f;
}
if (index>(size/2)){
Node<E> n = last;
for (int j = size-1;j>index;j++){
n = n.prev;
}
return n;
}
return null;
}
public E get(int index){
checkElement(index);
return node(index).item;
}
}
package shuanglianbiao;
public class Test3 {
public static void main(String[] args) {
Doublelink<String> link = new Doublelink();
link.addLast("C语言");
link.addLast("C++");
link.addLast("Python");
link.addFirst("Java");
link.print(link.first);
System.out.println();
System.out.println(link.get(0));
System.out.println(link.get(1));
}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/576a43ba1d5a4e399131fe94918fccff.png)