链表
class Link {
private class Node {
Object value; // 数据域
Node next; // 指针域
public Node(Object value) {
this.value = value;
}
}
private Node head;
private Node tail;
private int size;
public void add(Object obj) {
Node newNode = new Node(obj);
if (head == null) {
head = newNode;
tail = newNode;
} else {
tail.next = newNode;
tail = newNode;
}
size++;
}
public void travel() {
Node tmp = head;
while (tmp != null) {
System.out.println(tmp.value);
tmp = tmp.next;
}
}
public int size() {
/*
int size = 0;
Node tmp = head;
while (tmp != null) {
size++;
tmp = tmp.next;
}*/
return size;
}
public boolean remove(Object obj) {
if (head.value.equals(obj)) { // 先判断是否删除的是头
head = head.next;
size--;
return true;
}
Node prev = head;
while (prev.next != null) { // 用于检索要删除的目标结点的前一个
if (prev.next.value.equals(obj)) { // 判断的是prev.下一个节点的值
// 真正删除它
if (prev.next == tail) { // 如果删除的是尾结点, 必须让尾变化
tail = prev;
}
prev.next = prev.next.next; // 把要删除目标结点的后面的结点的地址写入前一个结点中.
size--;
return true;
}
prev = prev.next; // 如果判断失败, 继续右移指针.
}
return false;
}
}
public class LinkTest {
public static void main(String[] args) {
Link link = new Link();
link.add("yy");
link.add("abc");
link.add("aa");
link.add("aa");
link.add("cc");
link.add("qq");
link.add("zz");
link.add("pp");
link.add("aa");
link.add("xx");
link.travel();
System.out.println("********************");
link.remove("qq");
link.travel();
}
}
二叉树
class Tree {
private class TreeNode {
int value;
TreeNode left;
TreeNode right;
}
private TreeNode root; // 根引用
public void add(int n) {
TreeNode newNode = new TreeNode();
newNode.value = n;
if (root == null) { // 树为空
root = newNode;
} else {
insert(root, newNode);
}
}
public void insert(TreeNode target, TreeNode newNode) {
if (newNode.value < target.value) { // 新结点比目标小, 向左走
if (target.left == null) {
target.left = newNode;
} else {
insert(target.left, newNode);
}
} else { // 向右走
if (target.right == null) {
target.right = newNode;
} else {
insert(target.right, newNode);
}
}
}
public void view(TreeNode node) {
if (node == null) {
return;
}
view(node.left);
System.out.println(node.value);
view(node.right);
}
public void travel() {
view(root);
}
}
public class TreeTest {
public static void main(String[] args) {
Tree tree = new Tree();
tree.add(20);
tree.add(10);
tree.add(50);
tree.add(80);
tree.add(5);
tree.add(2);
tree.add(9);
tree.travel();
}
}