zoukankan      html  css  js  c++  java
  • java实现单链表

    早上清早起来,第一件事就是打开博客园随便的翻看下博客, 看到有篇文章提到的算法数据结构,实现一个单链表的操作。作者是使用c#编写的, 那么我这里通过java也来弄弄。

    首先定义一个Node类

    public class Node {
         protected Node next; //指针域  
         public  int data;//数据域  
           
         public Node( int data) {  
               this. data = data;  
         }  
           
         //显示此节点  
         public void display() {  
              System. out.print( data + " ");  
         }  
    }

    接下来定义一个单链表,并实现相关方法:

    public class LinkList {
        public Node first; // 定义一个头结点
        private int pos = 0;// 节点的位置
    
        public LinkList() {
            this.first = null;
        }
    
        // 插入一个头节点
        public void addFirstNode(int data) {
            Node node = new Node(data);
            node.next = first;
            first = node;
        }
    
        // 删除一个头结点,并返回头结点
        public Node deleteFirstNode() {
            Node tempNode = first;
            first = tempNode.next;
            return tempNode;
        }
    
        // 在任意位置插入节点 在index的后面插入
        public void add(int index, int data) {
            Node node = new Node(data);
            Node current = first;
            Node previous = first;
            while (pos != index) {
                previous = current;
                current = current.next;
                pos++;
            }
            node.next = current;
            previous.next = node;
            pos = 0;
        }
    
        // 删除任意位置的节点
        public Node deleteByPos(int index) {
            Node current = first;
            Node previous = first;
            while (pos != index) {
                pos++;
                previous = current;
                current = current.next;
            }
            if (current == first) {
                first = first.next;
            } else {
                pos = 0;
                previous.next = current.next;
            }
            return current;
        }
    
        // 根据节点的data删除节点(仅仅删除第一个)
        public Node deleteByData(int data) {
            Node current = first;
            Node previous = first; // 记住上一个节点
            while (current.data != data) {
                if (current.next == null) {
                    return null;
                }
                previous = current;
                current = current.next;
            }
            if (current == first) {
                first = first.next;
            } else {
                previous.next = current.next;
            }
            return current;
        }
    
        // 显示出所有的节点信息
        public void displayAllNodes() {
            Node current = first;
            while (current != null) {
                current.display();
                current = current.next;
            }
            System.out.println();
        }
    
        // 根据位置查找节点信息
        public Node findByPos(int index) {
            Node current = first;
            if (pos != index) {
                current = current.next;
                pos++;
            }
            return current;
        }
    
        // 根据数据查找节点信息
        public Node findByData(int data) {
            Node current = first;
            while (current.data != data) {
                if (current.next == null)
                    return null;
                current = current.next;
            }
            return current;
        }
    }

    最后我们可以通过测试类来做相关测试:

    public class TestLinkList {
        public static void main(String[] args) {  
            LinkList linkList = new LinkList();  
            linkList.addFirstNode(20);  
            linkList.addFirstNode(21);  
            linkList.addFirstNode(19);  
             //print19,21,20  
            linkList.add(1, 22); //print19,22,21,20  
            linkList.add(2, 23); //print19,22,23,21,20  
            linkList.add(3, 99); //print19,22,23,99,21,20  
          //调用此方法会print 19,22,23,99,21,20 
            linkList.displayAllNodes();  
            }
    }

    至此,对单链表的操作就笔记到这里了。

  • 相关阅读:
    linux下修改mysql密码
    会话跟踪技术之——cookie
    servlet之注册登录(简写)
    java服务端和用户端
    JavaBean和jsp的开发模型
    session的用法
    jsp元素
    servlet
    ServletContext对象统计在线人数
    图片站点服务
  • 原文地址:https://www.cnblogs.com/_popc/p/4025684.html
Copyright © 2011-2022 走看看