链表 二叉树
class Node {
object value; // 数据域
Node next; // 指针域
public Node (Object value,Node next) {
this.value = value;
this.next = next;
}
}
class Link {
private Node head; // 指向头结点对象
private Node tail; // 指向尾结点对象
private int size;
public void add(object val) {
Node newNode = new Node(val,null);
newNode.value = val; // 让结点对象携带数据
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; // 刷新tmp,让它又指向了原来的下一个结点
}
}
/**
*递归方法,遍历链表,分解成只打印头的数据和把头的下一个又作为新头的子链表递归处理,
*直到链表为空为止
*@paramtmpHead,以它为头的链表
*/
private void view (Node tmpHead) {
if (tmpHead == null) {
return;
}
System.out.println(tmpHead.value);
view(tmpHead.next);
}
public void Travel2 () {
view(head);
}
/**
* 删除某个元素
* @param val
* @return 成功或失败
*/
public boolean remove(object val) {
if (head == null) {
return false;
}
if (head.value.eaquals(val)) {//单独判断头的情况
head = head.next;
size--;
return true;
}
Node prev = head;
while (prev.next != null) {
if (prev.next.