单向链表的Java实现

时间:2023-03-08 21:59:26
package testOffer.linkedList;

import org.w3c.dom.Node;

public class SingleLinkedList {

    //测试用例
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList();
singleLinkedList.addHead("A");
singleLinkedList.addHead("B");
singleLinkedList.display();
} /********实现代码**********/ private int size; //链表节点的个数
private Node head; //头节点 public SingleLinkedList(){
size = 0;
head = null;
} //链表的每个节点类
private class Node{
private Object data; //每个节点的数据
private Node next; //每个节点指向下一个节点的连接 public Node(Object data){
this.data = data;
}
} //在链表头添加元素
private Object addHead(Object obj){
Node newHead = new Node(obj);
if (size == 0){
head = newHead;
}else {
newHead.next = head;
head = newHead;
}
size++;
return obj;
} //在链表头删除元素
private Object deleteHead(){
Object obj = head.data;
head = head.next;
size--;
return obj;
} //查找指定元素,找到了返回节点Node,找不到返回null
public Node find(Object obj){
Node current = head;
int tempSize = size;
while(tempSize > 0){
if (obj.equals(current.data)){
return current;
}else {
current = current.next;
}
tempSize--;
}
return null;
} //删除指定元素,删除成功返回true
public boolean delete(Object value){
if (size == 0) return false;
Node current = head;
Node previous = head;
while(current.data!=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 tempSize = size;
if (tempSize==1){
System.out.print("["+node.data+"]");
return;
}
while(tempSize>0){
if (node.equals(head)){
System.out.print("["+node.data+"->");
}else if (node.next == null){
System.out.print(node.data+"]");
}else {
System.out.print(node.data+"->");
}
node = node.next;
tempSize--;
}
System.out.println();
}else {
System.out.println("[]");
}
}
}