文档章节

简易的linklist

火犀牛
 火犀牛
发布于 2016/04/20 15:17
字数 344
阅读 6
收藏 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
72
0
新人关于函数内指针传出的迷惑!(自己写的链表程序有问题)

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
91
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
137
2
练手系列(链表)

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

长平狐
2013/03/12
28
0
C++中运算符重载和友元函数的问题

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

王囧
2012/12/12
338
4

没有更多内容

加载失败,请刷新页面

加载更多

帧动画(wifi信号动态动画)

准备六张wifi不同信号强度的素材图片,复制到drawable目录中 在drawable目录中新建frame文件,并编写代码 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> ...

lanyu96
25分钟前
1
0
快速get到学习Linux操作系统的点

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件、网络协议和应用程序。它支持32位...

问题终结者
33分钟前
1
0
Django2 model操作数据库

1.将应用(如learn)添加到安装应用配置中 将我们新建的应用(learn)添加到 settings.py 中的 INSTALLED_APPS中,告诉Django有这么一个应用。 INSTALLED_APPS = [ 'django.contrib.ad...

MichaelShu
35分钟前
1
0
SpringBoot基础篇Bean之条件注入之注解使用

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 bean的条件注入,除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己...

小灰灰Blog
46分钟前
1
0
git clone 报错 Clone failed: Authentication failed for

新装了系统,git和phpstorm的配置全都没有了,重新安装了git和phpstorm 系统:windows10 代码托管平台:阿里云code 软件的安装不作赘述。 报错1 Could not read from remote repository 解决...

Marhal
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部