1、单向链表
public class SingleLinkedList {
private int size;
private Node head;
public SingleLinkedList() {
size =0;
head = null;
}
private class Node{
private Object val;//每个节点的数据
private Node next;
public Node(Object data) {
val = data;
}
}
// 添加元素
public Object addHead(Object obj) {
Node newHead = new Node(obj);
if(size==0) {
head = newHead;
}
else {
newHead.next = head;
head = newHead;
}
size++;
return obj;
}
//查找指定 元素
public Node find(Object obj) {
Node current = head;
int tmpSize = size;
while(tmpSize>0) {
if(obj.equals(current.val)) {
return current;
}else {
current = current.next;
}
tmpSize--;
}
return null;
}
//删除元素
public boolean delete(Object value) {
if(size ==0) {
return false;
}
Node current = head;
Node previous = head;
while(current.val!=value) {
if(current.next==null) {
return false;
}else {
previous = current;
current = current.next;
}
}
//此时的元素和要寻找的元素相同
if(current==head) {
head = current.next;
size--;
}else {
previous.next = current.next;
size--;
}
return true;
}
//判断链表是否为空
public boolean isEmpty() {
return (size == 0);
}
//显示节点信息
public void display() {
if(size>0) {
Node node = head;
int tmpsize = size;
if(tmpsize ==1) {
System.out.println(""+node.val+"");
return ;
}
//链表中的元素大于两个
while(tmpsize>0) {
if(node.equals(head)) {
System.out.print("["+node.val+"->");
}else if(node.next==null) {
System.out.print(node.val+"]");
}else {
System.out.print(node.val+"->");
}
node = node.next;
tmpsize--;
}
System.out.println();
}else {
System.out.println("[]");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SingleLinkedList singlelist = new SingleLinkedList();
singlelist.addHead("A");
singlelist.addHead("B");
singlelist.addHead("C");
singlelist.addHead("D");
// 显示链表
singlelist.display();
//删除元素
singlelist.delete("C");
singlelist.display();
System.out.println(singlelist.find("B"));
}
}