熟悉单向链表原理

来源:互联网 发布:php活动倒计时 编辑:程序博客网 时间:2024/05/22 01:27
链表是在数据结构中经常见到的一种形式,在Java中可以通过引用传递的方式进行实现,代码如下。

链表就好像火车车厢那样,从火车头开始,每一节车厢之后都连着后一节车厢。每一节车厢就相当于一个节点,每一个节点除了要保存自己的内容之外,还要保存下一个节点的引用。如下图所示:



增加节点肯定是在链表的最后进行增加;

查找节点肯定是依次递归的方式进行查找;

删除节点:实际上就是改变引用传递的地址;

在程序开发中必须考虑两种情况:

a,第一次执行的时候根节点不存在,需要将第一个节点设置成为根节点

b,之后执行的效果

public class Link {//链表操作类private Node root;//根节点class Node{//内部类(方便访问外部类私有属性)private String data;private Node next;public Node(String data){this.data = data;}public String getData(){return this.data;}public void add(Node newNode){//将节点增加到合适的位置上去if(this.next==null)//判断下一个节点是否为空this.next = newNode;//如果为空,则把新节点设置在该位置上else            //如果不为空,则需要向下继续找nextthis.next.add(newNode);//在下一个位置处增加}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);//继续向下找}}public boolean search(String data){if(this.data.equals(data))//判断当前节点的名字是否与查找的一致return true;//如果一致,返回trueelse{//继续判断下一个if(this.next!=null){//下一个节点存在,则继续查找return this.next.search(data);//返回下一个节点的查询结果}elsereturn false;//节点不存在}}public void showNode(){System.out.print(this.getData()+"-->");if(this.next!=null){//节点不为空,则继续打印this.next.showNode();//让下一个节点输出}}};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.showNode();}public boolean contains(String name){//判断节点是否存在return this.root.search(name);//调用Node类中的search方法}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 static void main(String args[]){Link l = new Link();l.addNode("A");l.addNode("B");l.addNode("C");l.addNode("D");l.addNode("E");l.addNode("F");l.printNode();System.out.println();l.deleteNode("A");l.printNode();System.out.println();System.out.println(l.contains("A"));}}


0 1
原创粉丝点击