文档章节

简易的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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:简单工厂模式(静态共产方法模式)

简单工厂的构成包括三个角色: 1)抽象产品类 2)具体产品类(继承抽闲产品类) 3)工厂类(生产具体产品) 具体代码实现 1、抽象产品类 /** * 抽象类 */public abstract class Car ...

京一
5分钟前
0
0
Lombok使用

1 介绍 Lombok是一个简单的Java库,改工具可以通过注解自动地提供一些方法,简化开发。比如编写POJO时需要为每个属性提供getter()方法和setter()方法,这就可以使用Lombok实现。 2 配置 Lomb...

SuperHeroes
13分钟前
0
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
15分钟前
0
0
java虚拟机之内存模型

1. 概述 对于从事 C、C++ 程序开发的人员来说,在内存管理领域,他们既是拥有最高权力的「皇帝」又是从事基础工作的「劳动人民」 --- 既拥有每个对象的「所有权」,又担负着每一个对象生命开...

firepation
17分钟前
0
0
解决linux的-bash: ./xx: Permission denied

解决linux的-bash: ./xx: Permission denied 在linux下执行sh文件时提示下面信息: -bash: ./xx.sh: Permission denied解决:chmod 777 xx.sh 1 2 3 4 Linux chmod +755和chmod +777 ......

DemonsI
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部