public class SingleLinkedList<T> {
private Node header;
private int size;
private class Node {
private T data;
private Node next;
public T getData() {
return data;
}
public Node(T data) {
this.data = data;
}
}
public Node getHeader() {
return header;
}
public void addHeader(T data) {
Node node = new Node(data);
node.next = header;
header = node;
size++;
}
public boolean delete(T data) {
if (size == 0) {
return false;
}
if (data == null) {
throw new NullPointerException("数据不能为null");
}
Node current = header;
Node previous = null;
while (current != null) {
if (current.data.equals(data)) {
if (previous != null) {
previous.next = current.next;
}
size--;
return true;
} else {
previous = current;
current = current.next;
}
}
return false;
}
public boolean find(T data) {
if (header != null) {
Node temp = header;
while (temp != null) {
if (temp.data.equals(data)) {
return true;
}
temp = temp.next;
}
}
return false;
}
public void printList() {
System.out.println("Size = " + size);
Node temp = header;
while (temp != null) {
System.out.print(temp.getData().toString() + " ");
temp = temp.next;
}
System.out.println();
}
public void printReverseList(Node head) {
if (head != null) {
printReverseList(head.next);
System.out.print(head.data + " ");
}
}
public void reverseList() {
if (header == null) {
return;
}
if (header.next == null) {
return;
}
Node preNode = null;
Node curNode = header;
Node nextNode = null;
while (curNode != null) {
nextNode = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = nextNode;
}
header = preNode;
}
}