文档章节

Java数据结构(四):线性表之双向链表

凌枫yong
 凌枫yong
发布于 2016/07/17 13:44
字数 344
阅读 8
收藏 0

java实现简单的双向链表,代码如下:

package datastructure.linear.linked;

import datastructure.exception.StructureException;
import datastructure.linear.AbstractList;

/** * @Description 双向链表实现 * @author mastery * @Date 2015年6月30日下午9:11:51 */
public class BidirectionalLinkedList<T> extends AbstractList<T> {

    class Node<T1> {
        /** * 数据域 */
        T1 element;

        /** * 指向前驱结点的指针 */
        Node<T1> prior;

        /** * 指向后继结点的指针 */
        Node<T1> next;

        public Node(Node<T1> next) {
            super();
            this.prior = next;
            this.next = next;
        }

        public Node(T1 element, Node<T1> prior, Node<T1> next) {
            super();
            this.element = element;
            this.prior = prior;
            this.next = next;
        }

    }

    private Node<T> head;

    private Node<T> currentNode;

    public BidirectionalLinkedList() {
        head = currentNode = new Node<T>(null);
        size = 0;
    }

    /** * 得到当前下标对应的结点 * * @param index * @throws StructureException */
    public void indexNodeToCurrent(int index) throws StructureException {
        currentNode = head;
        if (index < -1 || index > size - 1) {
            throw new StructureException("index参数异常!");
        }
        if (index == -1) {
            return;
        }
        currentNode = head.next;
        int j = 0;
        while (currentNode != null && j < index) {
            currentNode = currentNode.next;
            j++;
        }
    }

    @Override
    public void insert(int index, T t) throws StructureException {
        if (index < 0 || index > size) {
            throw new StructureException("index参数异常!");
        }
        // 得到当前下标的上一个结点
        indexNodeToCurrent(index - 1);
        Node<T> insertNode = new Node<T>(t, currentNode, currentNode.next);
        if (currentNode.next != null) {
            // 将新元素生成结点插入到当前结点下
            currentNode.next.prior = insertNode;
        }
        currentNode.next = insertNode;
        size++;
    }

    @Override
    public void delete(int index) throws StructureException {
        if (isEmpty()) {
            throw new StructureException("链表为空");
        }
        if (index < 0 || index > size) {
            throw new StructureException("index参数异常");
        }
        indexNodeToCurrent(index - 1);
        Node<T> twoNextNode = currentNode.next.next;
        if (twoNextNode != null) {
            twoNextNode.prior = currentNode;
        }
        currentNode.next = twoNextNode;
        size--;
    }

    @Override
    public T get(int index) throws StructureException {
        if (isEmpty()) {
            throw new StructureException("链表为空");
        }
        if (index < 0 || index > size) {
            throw new StructureException("index参数异常!");
        }
        indexNodeToCurrent(index);
        return currentNode.element;
    }

}

本文转载自:http://blog.csdn.net/u011990285/article/details/46710787

共有 人打赏支持
凌枫yong
粉丝 1
博文 65
码字总数 0
作品 0
南昌
私信 提问
第一阶段:Java内功秘籍-线性表

前言 为什么要学习数据结构与算法,如果你学会了做安卓,javaweb,前端等,都是你的武功秘籍,但是如果你的内功不够好,再厉害的功夫也是白费。 数据结构和算法:什么是数据结构,什么是数据...

达叔小生
2018/08/06
0
0
《数据结构与算法系列》合集整理

《数据结构与算法系列》合集整理 整理来自博客园skywang12345,以下摘自作者介绍: “最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C++"...

kaixin_code
2018/12/01
0
0
Java核心(四)你不知道的数据集合

导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List、Set、Q...

王磊的博客
2018/11/28
0
0
[LintCode] Linked List Cycle(带环链表)

描述 给定一个链表,判断它是否有环。 样例 给出 -21->10->4->5, tail connects to node index 1,返回 true。 这里解释下,题目的意思,在英文原题中,tail connects to node index 1 表示的...

honeymose
2018/12/16
0
0
线性表(Linear List)

线性表(linear list) 1、特点 线性表是我们日常工作中最简单也是最常用的一种数据结构。 它有如下特点: 每个数据元素最多只能有一个直接前趋。 每个数据元素最多只能有一个直接后继。 只有...

星汉
2018/09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
55分钟前
3
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
2
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
8
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部