2017.08.13单向链表
2017-08-13 00:00
274 查看
老婆去总公司培训第十天了,挺想她
_________________________________________________________________________________
如果要想实现链表,则肯定要设计一个链表的节点类,在此类中必须有一个属性能保存下一个节点的地址
示例:
将现在的节点增加以下操作:增加数据,查找数据,删除数据:
_________________________________________________________________________________
如果要想实现链表,则肯定要设计一个链表的节点类,在此类中必须有一个属性能保存下一个节点的地址
示例:
class Node{ //定义节点类 private String data; //保存节点内容 private Node next; //表示保存下一个节点 public Node(String data){ //通过构造设置节点内容 this.data = data; //设置内容 } public void setNext(Node next){ this.next = next; //设置下一个节点 } public Node getNext(){ //取得下一个节点 return this.next; } public String getData(){ return this.data; //取得节点的内容 } } public class Test55{ public static void main(String args[]){ Node root = new Node("火车头"); //定义根节点 Node n1 = new Node("车厢 - A "); //定义第一个车厢(第一个节点) Node n2 = new Node("车厢 - B "); //定义第二个车厢(第二个节点) Node n3 = new Node("车厢 - C "); //定义第三个车厢(第三个节点) root.setNext(n1); //设置火车头的下一个节点是第一个车厢A n1.setNext(n2); n2.setNext(n3); //依次设置节点 printNode(root); //从头开始输出 } public static void printNode(Node node){ //输出节点 System.out.print(node.getData() + "\t"); //输出节点的内容 if(node.getNext()!=null){ //判断此节点是否存在下一个节点 printNode(node.getNext()); //向下继续输出 } } }
将现在的节点增加以下操作:增加数据,查找数据,删除数据:
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{ //如果不为空,则需要向下继续寻找 this.next.add(newNode); } } public void print(){ System.out.print(this.data + "\t"); if(this.next!=null){ this.next.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; } } } 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 = new Node(data); //将第一个节点设置成根节点 }else{ this.root.add(newNode); //不是根节点,放到合适位置,调用add方法 } } public void printNode(){ if(this.root!=null){ this.root.print(); } } public boolean contains(String name){ //判断元素是否存在 return this.root.search(name); } 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 Test56{ public static void main(String args[]){ Link l = new Link(); l.addNode("车厢-A"); l.addNode("车厢-B"); l.addNode("车厢-C"); l.addNode("车厢-D"); l.printNode(); System.out.println("\n" + l.contains("车厢-C")); l.deleteNode("车厢-C"); l.deleteNode("车厢-D"); l.printNode(); } }