Java如何单链表
- 首先定义一个单链表类,将单链表看作是一个对象,在里面去实现链表的各种操作方法,最主要是其中定义了一个单链表节点的成员内部类(成员内部类可以无条件访问外部类的属性和方法,但是外部类想要访问内部类属性或方法时,必须要创建一个内部类对象,然后通过该对象访问内部类的属性或方法)。
package Stack;
import org.junit.jupiter.api.Test;
//单链表类
class SingleLinkList{
//声明链表
private LinkNode head;//头节点
private int size;
//定义单链表节点 私有内部类
private class LinkNode{
private Object data;
private LinkNode next;//指向下一个节点
public LinkNode(Object e){
this.data=e;
}
}
//定义构造函数初始化
public SingleLinkList(){
size=0;
head=null;
}
//头插法加入节点
public Object addHead(Object obj){
LinkNode newNode = new LinkNode(obj);
if(size==0){
head = newNode;
}else{
newNode.next = head;
head.next = newNode;//应该是head = netNode; 头指针让位。
}
size++;
return obj;
}
//返回找到数据的节点
public LinkNode Find(Object obj){
LinkNode current = head;
int tmpSize = size;//采用临时的变量计数
while(tmpSize>0){
if(current.data==obj){
return current;
}else{
current = current.next;
}
tmpSize--;
}
return null;
}
public boolean delNode(Object obj){
if(size==0){
return false;
}
LinkNode current = head;
LinkNode p = head;
while(current.data!=obj){
if(current==null){
return false;
}else {
p =current;
current = current.next;
}
}
//经过while循环如果找到就会执行下面的代码,否则就会查找失败
if(current==head){
head=current.next;
}else{
p.next=current.next;//删除current节点
}
size--;//节点个数减一
return true;
}
public boolean isEmpty(){
return (size==0);
}
//显示节点
public void display(){
if(size>0){
LinkNode node = head;
int tmpSize = size;
if(tmpSize==1){
System.out.println("["+node.data+"]");
return;
}
while (tmpSize>0){
if(node.equals(head)){
System.out.println("["+node.data+"->");
}else if(node==null)//node是分配了地址空间,node的下一个指向应该是为空 即node.next==null{
System.out.println(node.data+"]");
}else {
System.out.println(node.data+"->");
}
node = node.next;
tmpSize--;
}
}else {
System.out.println("[ ]");
}
}
}
public class Structure01 {
public static void main(String[] args) {
SingleLinkList singleList = new SingleLinkList();
singleList.addHead("A");
singleList.addHead("B");
singleList.addHead("C");
singleList.addHead("D");
//打印当前链表信息
singleList.display();
//删除C
singleList.delNode("C");
singleList.display();
//查找B
System.out.println(singleList.Find("B"));
}
}