java实现单链表增删改查

package 数据结构算法.链表;

/*
 *定义节点
 *  链表由节点构成
 */
public class Node<E> {
    private E e;   //数据data
    private Node<E> next; //指向下一个节点

    public Node() {

    }

    public Node(E e) {
        this.e = e;
    }

    public Node<E> getNext() {
        return next;
    }

    public void setNext(Node<E> next) {
        this.next = next;
    }

    public E getE() {
        return e;
    }

    public void setE(E e) {
        this.e = e;
    }
}
package 数据结构算法.链表;

/*
 * 定义实现类MyLinkedList * 实现链表的基本功能:增删改查
 */
public class MyLinkedList<E> {
    //声明头节点尾节点
    private Node<E> head;
    private Node<E> last;
    //链表的大小
    private int size;
    private int modcount; //计算被修改的次数

    public MyLinkedList() {
        head = new Node<E>();//实例化头结点
        last = head;
    }

    /*
     *返回单链表中存储的元素总数
     */
    public int size() {
        return size;
    }

    /*
     *获取指定索引位置的节点对象
     */
    public Node<E> get(int index) {
        if (index < 0 || index > size - 1)
            return null;
        Node<E> node = head.getNext();//将头结点的下一个节点赋给Node
        for (int i = 0; i < index; i++) {
            node = node.getNext();//获取node的下一个节点
        }
        return node;
    }

    /*
     *获取指定索引位置的数据
     */
    public E getValue(int index) {
        if (index < 0 || index > size - 1)
            return null;
        Node<E> node = get(index);
        return node.getE();
    }

    /*
     *增加元素
     */
    public void add(E e) {
        Node<E> node = new Node<E>(e); //以e实例化一个节点
        last.setNext(node);//往尾节点后追加节点
        last = node;//该节点设为最后一个节点
        size++;
        modcount++;
    }

    /*
     *指定位置插入元素,返回插入的节点数据
     */
    public E add(int index, E e) {
        if (index < 0 || index > size - 1)
            return null;
        Node<E> node = new Node<E>(e); //实例化一个节点
        //找到插入的原节点
        Node<E> oldNode = get(index);
        if (index == 0) {//当索引为0时
            head.setNext(node);
        } else {
            //找到插入节点的上一个
            Node<E> bNode = get(index - 1);
            bNode.setNext(node);
        }
        node.setNext(oldNode);
        size++;
        modcount++;
        return oldNode.getE();
    }

    /*
     *删除指定的节点e,并返回删除节点的数据
     */
    public E delete(int index) {
        if (index < 0 || index > size - 1)
            return null;
        if (index == 0) {//当索引为1,令头结点的下一个节点为头结点
            Node<E> node = head.getNext();
            head.setNext(node.getNext());
        }
        //获取要删除节点的前一个节点
        Node<E> bNode = get(index - 1);
        //获取要删除的节点
        Node<E> Node = bNode.getNext();
        //获取要删除节点的下一个节点
        Node<E> nNode = Node.getNext();
        //删除该节点
        bNode.setNext(nNode);
        //清除Node的下一个节点
        Node.setNext(null);
        size--;
        modcount++;
        return Node.getE();//返回节点中的数据域
    }

    /*
     *修改指定位置的数据域并返回修改后的数据
     */
    public E set(int index, E e) {
        if (index < 0 || index > size - 1)
            return null;
        //获取指定位置的原节点
        Node<E> node = get(index);
        node.setE(e);
        modcount++;
        return node.getE();
    }
}
package 数据结构算法.链表;

/*
 *定义测试类
 */
public class MyLinkedListTest {
    public static void main(String[] args) {
        MyLinkedList<String> list = new MyLinkedList<>();

        //测试add
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add(0,"newone");
        list.add(1,"newtwo");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.getValue(i)+" ");
        }

        //测试set
        System.out.println();
        list.set(0, "111");
        list.set(1, "222");
        System.out.println(list.getValue(0) + "   " + list.getValue(1));

        //测试delete
        System.out.println();
        list.delete(1);
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.getValue(i)+" ");
        }
    }
}

运行结果如下:

参考自:https://zhuanlan.zhihu.com/p/30141170

原文地址:https://www.cnblogs.com/zengcongcong/p/11432331.html

时间: 2024-08-13 09:00:34

java实现单链表增删改查的相关文章

mybatis(单表增删改查)

(mybatis注意各个文件的映射问题) 用到的t_user数据库脚本: -- 导出 mybatis 的数据库结构 CREATE DATABASE IF NOT EXISTS `mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `mybatis`; -- 导出 表 mybatis.t_user 结构 CREATE TABLE IF NOT EXISTS `t_user` ( `id` int(10) NOT NULL AUTO_INCREM

mybatis(单表增删改查useMapper版)

数据库脚本(注意测试时先add-->load-->update-->delete-->list)UserMapper版 -- -------------------------------------------------------- -- 主机: 127.0.0.1 -- 服务器版本: 5.5.36-MariaDB - mariadb.org binary distribution -- 服务器操作系统: Win32 -- HeidiSQL 版本: 8.0.0.4396 --

Java连接MySQL数据库增删改查通用方法

Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了  数据库--MySQL-->Java篇 接下来我给大家讲讲如何将

使用CI操作oracle 10g的单表增删改查

<?php if (!defined('BASEPATH'))    exit('No direct script access allowed'); class UseOra extends CI_Controller{ public function index()    {        echo '欢迎使用测试CI使用Oracle 10g 的功能,您可以在地址栏中使用如下的函数参数:<br>';        echo '=============================

再说“使用CI操作oracle 10g的单表增删改查”

--Control中的UseOra.php <?php if (!defined('BASEPATH'))    exit('No direct script access allowed'); class UseOra extends CI_Controller{ public function index()    {        echo '欢迎使用测试CI使用Oracle 10g 的功能,您可以在地址栏中使用如下的函数参数:<br>';        echo '=======

Mybatis实现单表增删改查操作

mybatis是对持久层进行了封装.mybatis文档地址:https://mybatis.org/mybatis-3/zh/index.html 下面实现单表的增删改查操作. 1.新建maven项目命名为mybatis.并在pom.xml中引入相关依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

Java连接MongoDB进行增删改查

1.导入必须的包: 详情看项目:http://pan.baidu.com/s/1cvDAOY 2.通过Myeclipse创建WEB项目 3. 3.bean:创建实体类 package com.bean; import java.io.Serializable; import java.util.Date; /** * @since 对应于mongodb中的数据库test中的表com * @author think * */ public class Company implements Seri

单向链表增删改查的实现

/*实现单向链表的增删改查 */#include <malloc.h>#include <stdio.h>#include<stdlib.h>#define LEN sizeof(node) typedef struct node{ int num; struct node *next;}node,*pnode; /*在链表头进行插入,新节点成为头节点,原头节点成为新节点的下一个节点,头节点指针后伊一位*/void insert_head(pnode *phead,in

MyBatis单表增删改查--XML实现

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2.