文档章节

简易的linklist

火犀牛
 火犀牛
发布于 2016/04/20 15:17
字数 344
阅读 6
收藏 0
点赞 1
评论 0
package com.rr.java.e2_List;

/**
 * Created by isaac_gu on 2016/4/20.
 */
public class MyLinkedList {
    private Node first;
    private Node last;

    private int size;

    /**
     * 所有的值都是放到节点里面
     *
     * @param obj
     */
    public void add(Object obj) {
        Node n = new Node();
        if (first == null) {
            //第一个节点,pre与next都是null
            n.setData(obj);

            //记录first与last
            first = n;
            last = n;
        } else {
            //直接往last节点后增加新的节点
            n.setData(obj);
            //pre就是之前的last
            n.setPrevious(last);
            //next 还是null
            n.setNext(null);

            //给last记录Next的位置
            last.setNext(n);

            //当前的对象为last
            last = n;
        }
        size++;
    }

    /**
     * list的长度
     *
     * @return
     */
    public int size() {
        return size;
    }

    /**
     * 获得索引位置的值
     *
     * @param index
     * @return
     */
    public Object get(int index) {
        checkElementIndex(index);
        Node node = node(index);
        return node.getData();
    }

    private Node node(int index) {
        Node node = null;
        if (first != null) {
            node = first;
            for (int i = 0; i < index; i++) {
                node = node.getNext();
            }
        }
        return node;
    }

    private void checkElementIndex(int index) {
        if (!isElementIndex(index))
            throw new IndexOutOfBoundsException();
    }

    private boolean isElementIndex(int index) {
        return index >= 0 && index < size;
    }

    /**
     * 删除一个节点
     *
     * @param index
     * @return
     */
    public boolean remove(int index) {
        //获得目标节点
        Node node = node(index);
        if (node != null) {
            //获得目标节点的上一个以及下一个节点
            Node pre = node.getPrevious();
            Node next = node.getNext();

            //交换值
            pre.setNext(next);
            next.setPrevious(pre);

            //数组减小
            size--;
            return true;
        }

        return false;
    }

}

class Node {
    private Node previous;    //前一个节点
    private Node next;        //下一个节点
    private Object data;          //当前节点

    public Node getPrevious() {
        return previous;
    }

    public void setPrevious(Node previous) {
        this.previous = previous;
    }

    public Node getNext() {
        return next;
    }

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

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}


© 著作权归作者所有

共有 人打赏支持
火犀牛
粉丝 0
博文 27
码字总数 12180
作品 0
海淀
程序员
不知道程序哪里出问题了,好像是重复定义,希望大家指点一下

include"stdio.h" #include"math.h" #include"time.h" #include"stdlib.h" #include"ctype.h" #include"string.h" #include"io.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FLA......

---BearWolf ⋅ 2013/11/20 ⋅ 0

逆置链表的两种方法

//第一种,使用后添数据的方式创建一个新链表 #include <stdio.h> #include <malloc.h> typedef struct Node { int data; struct Node next; }LIST, LINKLIST; /创建链表/ LINKLIST createLi......

chapin ⋅ 2013/03/21 ⋅ 1

新人关于函数内指针传出的迷惑!(自己写的链表程序有问题)

typedef struct Linklist{ int elem; Linklist * next; }Linklist; int add(Linklist* head,int e) { if (head == NULL) { head = (Linklist*)malloc(sizeof(Linklist)); head->elem = e; re......

木叶7 ⋅ 2017/03/04 ⋅ 2

带头节点的单链表插入元素不成功

public class Student { private Object id; private Object name; private Object _class; private Object sex; private Object phone_num; private Object course; public int in=0; LinkL......

jask ⋅ 2015/03/29 ⋅ 2

练手系列(链表)

简单的单向链表的实现,主要功能包括:链表反转 元素获取 链表合并。 LinkList.h 1#ifndef HEADERLINKLIST_CLASS 2#define HEADERLINKLIST_CLASS 3 #include 4usingnamespace std; 5 6 typed...

长平狐 ⋅ 2013/03/12 ⋅ 0

C++中运算符重载和友元函数的问题

自己写了一个链表类,并且分别重载了两个运算符,定义如下 LinkList& operator=(LinkList &l1);friend const LinkList& operator+(LinkList &l1,LinkList &l2); 一开始两个运算符单独使用都没...

王囧 ⋅ 2012/12/12 ⋅ 4

关于单链表的一个问题

程序不知道哪里出错,一运行就崩溃,求助? #include"stdio.h" #include"stdlib.h" #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 //不可执行 #defin......

ExtreU ⋅ 2014/10/09 ⋅ 5

花大家一点时间问问,下面代码为什么会出现错误

我下面这段代码非常奇怪,只要加上int printlink(struct node *s)这个函数就会出现段错误,如果注释掉这个函数就没问题,很奇怪,百思不得其解,拜托大侠帮我看看,纯新手求教了! #include...

云端的人 ⋅ 2013/08/16 ⋅ 5

写单链表时,为什么传入结构指针不可以初始化,而对于插入删除时传入结构指针却可以改变其指向?

单链表的存储结构: typedef struct NOde { ElemType data; struct Node *next; }Node,*LinkList; //初始化 void InitList (Linklist L) { L =(Linklist)malloc(sizeof(Node)); L->next=NULL......

DBZ002 ⋅ 2016/09/27 ⋅ 1

线性表的链式存储结构

上一篇博文我对数据结构中线性表的顺序存储结构顺序表(http://12172969.blog.51cto.com/12162969/1916336)按照我的理解做了总结,今天我继续对顺序表的另一种存储结构,链表谈一下我看法。...

捕风的xiao_k ⋅ 2017/04/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具

压缩打包介绍 使用压缩工具的好处: 使用压缩文件,不仅可以节省磁盘空间,而且在传输时还能节省网络宽带。 我们通常讲的家用宽带和机房宽带100M是有区别的: 机房宽带的上行和下行都是100M,...

Linux_老吴 ⋅ 24分钟前 ⋅ 0

SpringBoot热部署加持

概述 进行SpringBoot的Web开发过程中,我们很多时候经常需要重启Web服务器才能保证修改的 源代码文件、或者一些诸如xml的配置文件、以及一些静态文件生效,这样耗时又低效。所谓的热部署指的...

CodeSheep ⋅ 30分钟前 ⋅ 0

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 今天 ⋅ 5

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部