单向链表实现
来源:互联网 发布:今年淘宝双11 1元 编辑:程序博客网 时间:2024/06/07 22:27
package test;
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
}
}
}
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) ;// 把下一个节点的前节点和数据一起传入进去
}
}
}
};
public class LinkDemo02{
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")) ;
}
};
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
}
}
}
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) ;// 把下一个节点的前节点和数据一起传入进去
}
}
}
};
public class LinkDemo02{
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")) ;
}
};
阅读全文
0 0
- 单向链表实现
- 单向链表实现
- C#实现单向链表
- 单向链表实现源代码
- java 实现单向链表
- 单向链表实现反转
- java实现单向链表
- C++实现单向链表
- 单向链表的实现
- java 单向链表实现
- C#实现单向链表
- 单向链表实现堆栈
- 单向链表JS实现
- 单向链表的实现
- java实现单向链表
- 单向链表插入实现
- c++ 实现单向链表
- js实现单向链表
- 均分函数 numpy.arange() 和 numpy.linspace()
- 光荣的梦想
- JavaScript之事件的绑定与移除
- 车牌识别sdk与物联网发展
- js for等循环 跳出多层循环
- 单向链表实现
- 使用HTML语言和CSS开发商业站点_CSS3美化网页元素
- 387. First Unique Character in a String
- 使用Intent传递对象数据
- webim【LayIM】开发者文档
- Gradle 'ExoPlayer-release-v2' project refresh failed Error:Connection timed out: connect
- BootKit病毒——“异鬼Ⅱ”的前世今生
- 第三堂课
- AOP 学习