class Link
{ // 链表的完成类
//--内部类开始----------------------------------------------------------------------
class Node // 保存每一个节点,此处为了方便直接定义成内部类
{
private String data ; // 保存节点的内容
private Node next ; // 保存下一个节点
public Node(String data)
{
this.data = data ; // 通过构造方法设置节点内容
}
//------------------------------------------------------------------------
public void add(Node newNode)
{ // 将节点加入到合适的位置
if(this.next==null) // 如果下一个节点为空,则把新节点设置在next的位置上
{
this.next = newNode ;
}
else // 如果不为空,则需要向下继续找next
{
this.next.add(newNode) ;
}
}
//------------------------------------------------------------------------
public void print()
{
System.out.print(this.data + "\t") ; // 输出节点内容
if(this.next!=null) // 还有下一个元素,需要继续输出
{
this.next.print() ; // 下一个节点继续调用print
}
}
//------------------------------------------------------------------------
public boolean search(String data) // 内部搜索的方法
{
if(data.equals(this.data)) // 判断输入的数据是否和当前节点的数据一致
{
return true ;
}
else // 向下继续判断
{ if(this.next!=null) // 下一个节点如果存在,则继续查找
{
return this.next.search(data) ; // 返回下一个的查询结果
}
else{
return false ; // 如果所有的节点都查询完之后,没有内容相等,则返回false
}
}
}
//----------------p1--tp2--nt3--0n4--5------------------------------------------------
public void delete(Node previous,String data)
{
if(data.equals(this.data)) // 找到了匹配的节点
{
previous.next = this.next ; // 空出当前的节点
}
else
{
if(this.next!=null) // 还是存在下一个节点
{
this.next.delete(this,data) ; // 继续查找
}
}
}
};//内部类至此结束
//--内部类至此结束----------------------------------------------------------------------
private Node root ; // 链表中必然存在一个根节点
public void addNode(String data) // 增加节点
{
Node newNode = new Node(data) ;// 定义新的节点
if(this.root==null) // 没有根节点
{
this.root = newNode ; // 将第一个节点设置成根节点
}
else // 不是根节点,放到最后一个节点之后
{
this.root.add(newNode) ; // 通过Node自动安排此节点放的位置
}
}
//------------------------------------------------------------------------
public void printNode() // 输出全部的链表内容
{
if(this.root!=null) // 如果根元素不为空
{
this.root.print() ; // 调用Node类中的输出操作
}
}
//------------------------------------------------------------------------
public boolean contains(String name) // 判断元素是否存在
{
return this.root.search(name) ; // 调用Node类中的查找方法
}
//------------------------------------------------------------------------
public void deleteNode(String data) // 删除节点
{
if(this.contains(data)) // 判断节点是否存在
{ // 一定要判断此元素现在是不是根元素相等的
if(this.root.data.equals(data)) // 内容是根节点
{
this.root = this.root.next ; // 修改根节点,将第一个节点设置成根节点
}
else
{
this.root.next.delete(root,data) ; // 把下一个节点的前节点和数据一起传入进去
}
}
}
};//Link类结束
//---主方法开始---------------------------------------------------------------------
public class LinkDemo02st
{
public static void main(String args[])
{
Link l = new Link() ;
l.addNode("A") ; // 增加节点
l.addNode("B") ; // 增加节点
l.addNode("C") ; // 增加节点
l.addNode("D") ; // 增加节点
l.addNode("E") ; // 增加节点
System.out.println("======= 删除之前 ========") ;
l.printNode() ;
// System.out.println(l.contains("X")) ;
l.deleteNode("C") ; // 删除节点
l.deleteNode("D") ; // 删除节点
l.deleteNode("A") ; // 删除节点
System.out.println("\n====== 删除之后 =========") ;
l.printNode() ;
System.out.println("\n查询节点:" + l.contains("B")) ;
}
};//主方法结束
内部类实现链表的增加,删除和查找
猜你喜欢
转载自blog.csdn.net/weixin_43311389/article/details/82944160
今日推荐
周排行