单链表实现

Posted Miss_wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表实现相关的知识,希望对你有一定的参考价值。

package com.wyl.linklist;

public class MyLinkList {

    private Node head;  //链表的起始节点
    private int size = 0; //记录链表的长度
    /**
     * 定义内部节点类
     * @author wyl
     *
     */
    class Node {

        private String name;  //节点的内容
        private Node next; //指向节点的直接后继
        
        public Node(){
            
        }
        public Node(String name){
            this(name, null);
        }
        
        public Node(String name, Node next) {
            this.name = name;
            this.next = next;
        }
    }
    
    /**
     * 初始化链表,创建头结点
     */
    public MyLinkList(){  
        head = new Node();  //头结点为空节点
        head.next = null;
    }
    /**
     * 给链表中增加节点
     * @param data
     */
    public void addNode(String data){
        /* 1、获取表头
         * 2、通过表头找到最后一个元素
         * 3、将新增的节点放到最后一个节点的后面
         * */
        Node p = head;
        while(p.next != null){
            p = p.next; //移动指针,永远指向链表尾部
        }
        p.next = new Node(data);
        size++ ;
    }
    /*删除节点*/
    public void delNode(String data){
        /* 1、获取表头
         * 2、通过表头找到最后一个元素
         * 3、将新增的节点放到最后一个节点的后面
         * */
        if(head.next == null){
            return;
        }
        Node p = head;
        while(p.next != null){
            if(p.next.name.equals(data)){
                p.next = p.next.next;
                size--; 
                break;
            }else{
                p = p.next;
            }
        }
    }
    
    /*查找数据是否在链表中*/
    public boolean contains(String data){
        Node p = head;
        while(p.next != null){
            if(p.next.name.equals(data)){
                return true;
            }else{
                p = p.next;
            }
        }
        return false;
    }
    
    /*在指值的后面插入值*/
    public void insertNode(String param, String data){
        Node p = head;
        while(p.next != null){
            if(p.next.name.equals(param)){
                Node temp = p.next.next;
                Node newNode = new Node(data, temp);
                p.next.next = newNode;
                return;
            }else{
                p = p.next;
            }
        }
    }
    
    /*链表遍历*/
    public void iterator(){
        Node p = head;
        if(p.next == null){
            System.out.println("空链表");
        }
        p = p.next;
        while(p.next != null){
            System.out.print(p.name + "==>>");
            p = p.next;
        }
        System.out.print(p.name);
    }
    
    /*链表长度*/
    public int size(){
        return size;
    }
    
    public static void main(String[] args) {
        MyLinkList myLinkList = new MyLinkList();
        myLinkList.addNode("组长");
        myLinkList.addNode("部门经理");
        myLinkList.addNode("主管副总");
        myLinkList.addNode("总经理");
        myLinkList.iterator();
        System.out.println();
        
        myLinkList.delNode("部门经理");
        myLinkList.iterator();
        System.out.println();
        myLinkList.insertNode("主管副总", "经理");
        myLinkList.iterator();
    }
}

 

以上是关于单链表实现的主要内容,如果未能解决你的问题,请参考以下文章

基本数据结构实现--单链表含测试代码

C数据结构单链表接口函数逻辑解析与代码实现(含详细代码注释)

循环链表(循环单链表循环双链表)的相关操作的代码实现(C语言)

单链表各种操作的代码实现

php单链表实现的代码

Go-如何优雅的实现单链表?(含全部代码)