package cn.itcast.dlinklist;
import java.util.Stack;
public class DoubleLinkList {
// 节点类Node
private static class Node {
Object value;
Node prev = this;
Node next = this;
Node(Object v) {
value = v;
}
public String toString() {
return value.toString();
}
}
private Node head = new Node(null);
private int size; // 链表大小
public int size() {
return size;
}
public boolean addFirst(Object o) {
addAfter(new Node(o), head);
return true;
}
public boolean addLast(Object o) {
addBefore(new Node(o), head);
return true;
}
public boolean add(Object o) {
return addLast(o);
}
public boolean add(int index, Object o) {
addBefore(new Node(o), getNode(index));
return true;
}
public boolean remove(int index) {
removeNode(getNode(index));
return true;
}
public boolean removeFirst() {
removeNode(head.next);
return true;
}
public boolean removeLast() {
removeNode(head.prev);
return true;
}
// 根据索引获取该索引对应的节点
private Node getNode(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException();
Node node = head.next;
for (int i = 0; i < index; i++)
node = node.next;
return node;
}
// 在P节点之前添加新的节点
private void addBefore(Node newNode, Node node) {
newNode.next = node;
newNode.prev = node.prev;
newNode.next.prev = newNode;
newNode.prev.next = newNode;
size++;
}
// 在P节点之后添加新的节点
private void addAfter(Node newNode, Node node) {
newNode.prev = node;
newNode.next = node.next;
newNode.next.prev = newNode;
newNode.prev.next = newNode;
size++;
}
// 删除某个节点
private void removeNode(Node node) {
node.prev.next = node.next;
node.next.prev = node.prev;
node.prev = null;
node.next = null;
size--;
}
public String toString() {
StringBuffer s = new StringBuffer("[");
Node node = head;
for (int i = 0; i < size; i++) {
node = node.next;
if (i > 0)
s.append(", ");
s.append(node.value);
}
s.append("]");
return s.toString();
}
public static void main(String[] args) {
DoubleLinkList doubleLinkedList = new DoubleLinkList ();
for (int i = 1; i <= 20; i++) {
doubleLinkedList.add(i);
}
System.out.println(doubleLinkedList);
System.out.println(doubleLinkedList.getNode(0).toString());
Node p = doubleLinkedList.head.next;
doubleLinkedList.removeNode(doubleLinkedList.head);
boolean flag = false;
int a = 1;
for (int i = 1; i <= 100; i++) {
if ((i+"").contains("7")
|| i % 7 == 0) {
if (a % 2 != 0) {
flag = true;
a++;
} else {
flag = false;
a++;
}
System.out.println(p.toString() + "---->不报数");
} else {
System.out.println(p.toString() + "报的数---->" + i);
}
if (flag) {
p = p.prev;
} else {
p = p.next;
}
}
}
}