双向链表:
单向链表只能从一个方向遍历,双向链表可以从两个方向遍历。
双向链表的节点由三部分组成:第一部分保存节点本身的数据,第二部分保存下一个节点的地址,第三部分保存上一个节点的地址。
实现的代码如下:
package linkedList;
public class DoubleLinkedList {
private Node head;//头结点
private Node tail;//尾节点
private int size;//数据个数
private class Node{
private Object data;
private Node next;//下一个节点
private Node pre;//上一个节点
public Node(Object data) {
this.data = data;
}
}
//往链表头添加节点
public void addHead(Object obj) {
Node p = new Node(obj);
if(size==0) {
head = p;
head.next=null;
tail = head;
size++;
}else {
p.next = head;
head = p;
size++;
}
}
//往链表尾添加节点
public void addTail(Object obj) {
Node p = new Node(obj);
if(size==0) {
tail = p;
head = tail;
tail.next=null;
size++;
}else {
tail.next = p;
tail = p;
size++;
}
}
//删除链表头结点
public Object deleteHead() {
if(size==0) {
return null;
}else {
if(head.next==null) {
size--;
return head.data;
}else {
Object o = head.data;
head = head.next;
size--;
return o;
}
}
}
//删除链表尾节点
public Object deleteTail() {
if(size==0) {
return null;
}else {
if(size==1) {
size--;
return tail.data;
}else {
Object o = tail.data;
Node p =head;
while(p.next.next!=null) {
p = p.next;
}
tail = p;
tail.next=null;
size--;
return o;
}
}
}
//遍历整个链表的节点
public void showAllDate() {
Node p = head;
for(int i=0;i<size;i++) {
System.out.println(p.data);
p = p.next;
}
}
}
编写测试类进行测试:
package linkedList;
public class DoubleLinkedListTest {
public static void main(String[] args) {
DoubleLinkedList dll = new DoubleLinkedList();
dll.addHead(1);
dll.addHead(2);
dll.addHead(3);
dll.addTail(4);
dll.addTail(5);
dll.addTail(6);
dll.showAllDate();
dll.deleteHead();
dll.deleteTail();
dll.showAllDate();
}
}
以上就是双向链表的java代码实现过程。