Java链表的基本操作

来源:互联网 发布:美国原油进口数据 编辑:程序博客网 时间:2024/06/07 03:10
//date 2017-01-06 16:57//链表的基本操作://1.数据的增加2.取得保存元素的个数3.判断是否为空链表4.数据查询操作//5.根据索引取得数据6.修改指定索引的数据内容7.删除链表数据class Link {//将Node类设置为Link的内部类private class Node {private String data ;private Node next ;public Node (String data) {this.data = data ;}public void addNode(Node newNode) {if(this.next == null) {//当前节点为空this.next = newNode ;//保存新节点} else {//当前节点之后还存在有节点this.next.addNode(newNode) ;//当前节点的下一节点继续保存}}public boolean containsNode(String data) {if(data.equals(this.data)) {//当前节点数据为要查询的数据return true ;} else {if(this.next != null) {//还有后续节点可供查询return this.next.containsNode(data) ;}else {//没有后续节点return false ;}}}public void printNode() {System.out.println(this.data) ;//输出当前节点内容if(this.next != null) {//还有下一个节点this.next.printNode() ;//输出下一个节点内容}}public String getNode(int index) {if(Link.this.foot++ == index) {//表示找到了要查询的节点return this.data ;//直接返回当前节点数据} else {return this.next.getNode(index) ; }}public void setNode(int index, String data) {if(Link.this.foot++ == index) {//表示找到了要查询的节点this.data = data ;//修改当前节点数据} else {this.next.setNode(index, data) ;}}public void removeNode(Node previous, String data) {if(data.equals(this.data)) {previous.next = this.next ;} else {this.next.removeNode(this, data) ;}}}private Node root ;//根节点private int count = 0 ;//保存元素的个数private int foot = 0 ;//表示Node元素的编号索引public void add(String data) {//----1.增加数据的方法Node newNode = new Node(data) ;if(this.root == null) {this.root = newNode ;} else {this.root.addNode(newNode) ;}this.count++ ;//保存每一次完成的数据}public int size() {//----2.取得保存元素的个数return this.count ;}public boolean isEmpty() {//----3.判断是否为空链表return this.count == 0 ;}public boolean contains(String data) {//----4.查询数据if(data == null || this.root == null) {return false ;} else {return this.root.containsNode(data) ;}}public String get(int index) {//----5.根据索引取得数据if(index > this.count) {//表示查询范围超出return null ;}this.foot = 0 ;//表示从前向后查询return this.root.getNode(index) ;//在Node类中创建方法}public void set(int index, String data) {//----6.修改指定索引的数据内容if(index > this.count) {return ;}this.foot = 0 ;this.root.setNode(index, data) ;}public void remove(String data) {if(this.contains(data)) {if(data.equals(this.root.data)) {//是根节点元素this.root = this.root.next ;} else {this.root.next.removeNode(this.root, data) ;}this.count -- ;} }public void print() {//取出数据if(this.root != null) {//存在根节点this.root.printNode() ;}}}public class LinkListDemo {public static void main(String[] args) {Link link = new Link() ;System.out.println(link.isEmpty()) ;//增加数据link.add("数据1") ;link.add("数据2") ;link.add("数据3") ;link.add("数据4") ;link.add("数据5") ;link.set(0, "数据6") ;link.remove("数据4") ;link.print() ;  System.out.println(link.size()) ;System.out.println(link.isEmpty()) ;System.out.println(link.contains("数据1")) ;System.out.println(link.get(3)) ;}}

0 0