数据结构------双向链表
public class Node {
int data;
Node pre;
Node next;
public Node(int data) {
this.data = data;
}
public Node() {
}
}
/**
* 双向链表
*/
public class DoublyList02 {
private Node first; //头节点
private Node last;
private int length; //长度
public DoublyList02() {
this.first = new Node();
last = first;
this.length = 0;
}
public int getLength(){
return length;
}
/**
* 判断是否为空
* @return
*/
public boolean isEmpty(){
if (first.next == null)
return true;
return false;
}
/**
* 输出
*/
public void pirnt(){
Node curNode = first;
Node lastNode = last;
while (curNode.next != null){
curNode = curNode.next;
System.out.println(curNode.data);
}
}
public void pirnt2(){
Node lastNode = last;
while (lastNode != null){
System.out.println(lastNode.data);
lastNode = lastNode.pre;
}
}
/**
* 插入
* @param index
* @param data
* @return
*/
public boolean add(int index, int data){
if (index > length || index < 0)
return false;
Node newNode = new Node(data);
Node firNode = first;
Node parent = null;
int flag = 0;
while (firNode.next != null){
if (flag < index){
parent = firNode;
firNode = firNode.next;
flag++;
}else {
newNode.next = parent.next;
newNode.pre = parent;
parent.next = newNode;
firNode.pre = newNode;
return true;
}
}
return false;
}
/**
* 删除
* @param data
* @return
*/
public boolean delete(int data){
if (!search(data))
return false;
Node firNode = first;
Node parent = null;
while (firNode.next != null){
parent = firNode;
firNode = firNode.next;
if (firNode.data == data){
parent.next = firNode.next;
firNode.pre = parent;
return true;
}
}
return false;
}
/**
* 插入
* @param data
* @return
*/
public boolean add(int data){
Node newNode = new Node(data);
if (first.next == null){ //第一个节点开始
first.next = newNode;
last = newNode;
length++;
}else {
last.next = newNode;
newNode.pre = last;
last = newNode;
length++;
}
return true;
}
/**
* 查找
* @param data
* @return
*/
public boolean search(int data){
Node firNode = first;
while (firNode.next != null){
firNode = firNode.next;
if (data == firNode.data)
return true;
}
return false;
}
public static void main(String[] args) {
DoublyList02 list02 = new DoublyList02();
list02.add(1);
list02.add(2);
list02.add(3);
list02.add(2,4);
list02.delete(3);
list02.pirnt();
System.out.println("查找: " + list02.search(4));
System.out.println("长度为: "+list02.getLength());
}
}