class Link{ class Node{ private String name; private Node next; public Node(String name){ this.name = name ; } public String getName(){ return this.name; } public Node getNext(){ return this.next; } public void addNode(Node newNode){ if (this.next == null){ this.next = newNode; //如果当前调用对象的下一个叫节点为空,那么就在该当前节点后插入新<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>的节点。 }else{ this.next.addNode(newNode); //如果当前节点的下一个节点不为空,那么通过this.next继续查找下一个节点是否为空。(下一个叫节点).addNode(newNode) } } public void delNode(Node preNode , String name){ if (this.name.equals(name)){ preNode.next = this.next; //如果当前节点就是要删除的节点,则把当前节点的前一节点的next值设为,下一节点的next值,从而是链表断开。 }else{ this.next.delNode(this,name); } } public boolean searchNode(String name){ if (this.getName().equals(name)){ return true; //如果当前节点的name值与参数name相等,则返回true }else{ if(this.next.searchNode(name)){ return true; }else{ return false; } } } public void printNode(){ System.out.print(this.name); //输入当前节点的name。 if (this.next != null){ System.out.print("->"); this.next.printNode(); //如果当前节点的下一节点不为空,则继续调用printNode方法输出下一节点name。如果为空的话,则不继续查找下一节点。 } } } private Node root; public void add(String name){ Node newNode = new Node(name); //声明一个新的Node的实例化对象。 if (this.root == null){ this.root = newNode; //如果root为空,那么就把当前的实例化对象作为root。 }else{ this.root.addNode(newNode); //如果root不为空,则直接通过root调用addNode方法,并把新的实例化对象作为参数传递。 } } public void print(){ if (this.root != null) this.root.printNode(); //如果当前链表对象的root不为空,则直接通过root调用Node类中的printNode()方法。 } public boolean search(String name){ if (this.root.searchNode(name)){ return true; }else{ return false; } } public void delete(String name){ if (search(name)){ if (this.root.getName().equals(name)){ this.root = this.root.next; //该变根节点。 }else{ this.root.next.delNode(root,name); } }else{ System.out.println("This node is not exits"); } } } public class LinkDemo02{ public static void main(String args[]){ Link link = new Link(); link.add("第一节点"); link.add("第二节点"); link.add("第三节点"); link.add("第四节点"); link.add("第五节点"); link.delete("第三节点"); link.delete("第一节点"); link.print(); System.out.println(); link.add("第一节点"); link.print(); System.out.println(); link.add("第三节点"); link.print(); // System.out.println(link.search("第二节点")); } }
字典Map存键值对/\HashMap<K,V>LinkedHashMap<K,V>数组+链表数组+双链表(有序)自定义键对象(不能重)需要重写键的hashCode()方法、equals()方法。Mapimportja…
线性表是一种可以在任意位置插入和删除元素,由n个同类型元素组成的线性结构。主要包括顺序表,单链表,循环单链表,双向链表和仿真链表。应用比较广泛的是顺序表和单链表。2下面是线性表的接口,主要操作包括插入元素,删除元素,取得元素,得到线性表元素…
栈可变长数组实现链表实现数组与链表的对比队列链表实现栈下压栈(简称栈)是一种基于后进后出(LIFO)策略的集合类型。这里学习分别用数组和链表这两种基础数据结构来实现栈。栈支持的基本操作有push,pop。可变长数组实现要用数组实现栈,可以声…
输入一个链表,输出该链表中倒数第k个结点。第一个指针走(k-1)步,到达第k个节点,两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了<?phpclassNode{public$data;publ…
输入两个链表,找出它们的第一个公共结点1.两个单链表,有公共结点,那么必然,尾部公用2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值3.长的链表先走n步,两个链表再同时移动4.两个链表相交点就是第一个公共结点list…
链表获取元素1.声明结点p指向链表第一个结点,j初始化1开始2.j<i,p指向下一结点,因为此时p是指向的p的next,因此不需要等于3.如果到末尾了,p还为null,就是没有查找到插入元素1.插入元素和查找类似,找到位置后2.生成新…
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点。第一个指针走(k-1)步,到达第k个节点,两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结…
链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表单向链表,双向链表,环形链表PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区)规定:基本数据…