链表是一种物理存储单元上非连续、非顺序的存储结构。

链表是由那几个部分组成的呢?
 是由N个节点组成的
       每一个节点分为两部分:
                         1.数据域
                         2.指针域

数据域用来存储数据,指针域用来链接各个链表。

public class Node<E> {

    private E e;// 数据域
private Node<E> next;// 引用域 public Node() {
} public Node(E e) {
this.e = e;
} public E getE() {
return e;
} public void setE(E e) {
this.e = e;
} public Node<E> getNext() {
return next;
} public void setNext(Node<E> next) {
this.next = next;
}
public class MyLinkedList<E> {

    //声明头节点
private Node<E> root;
private int size;//声明单链表中存储的节点数 public MyLinkedList(){
root = new Node<E>();//实例化头节点
} /**
* 向链表中添加元素的方法
* @param e要添加的元素
*/
public void add(E e){
//根据e实例化了一个新的节点对象
Node<E> node = new Node<E>(e); //获取root的下一个节点
Node<E> tnode = root.getNext(); root.setNext(node);//将新的节点作为root的下一个节点 node.setNext(tnode);//将root原来的下一个节点作为新增加节点的下一个节点 size++;//记录添加的节点数
} /**
* 删除指定索引位置的元素
* @param index索引位置
* @return 返回删除的元素
*/
public E remove(int index){
if(index <= 0 || index > size)
return null;
//获取要删除节点的前一个节点
Node<E> node = select(index-1);
//获取要删除的节点
Node<E> dNode = node.getNext();
//获取要删除节点的后一个节点
Node<E> nNode = dNode.getNext(); //先建立删除节点的前一个节点和删除节点的后一个节点的关系
node.setNext(nNode);
//清除dNode的下一个节点
dNode.setNext(null); size--;//计数器减一 return dNode.getE();//返回删除节点中的数据域
} /**
* 获取指定索引位置的元素
* @param index索引位置
* @return 返回节点中的数据域
*/
public E get(int index){
if(index <= 0 || index > size)
return null;
//查找指定索引位置的节点对象
Node<E> node = select(index);
//获取节点中的数据域元素并返回
return node.getE();
} /**
* 获取单链表中存储的元素总数
* @return 返回size属性
*/
public int size(){
return size;
} /**
* 获取指定索引位置的节点对象
* @param index索引位置
* @return 返回获取到的节点对象
*/
private Node<E> select(int index){
Node<E> node = root.getNext();//将头节点的下一个节点赋给node
if(index==1)//如果index是1表示是头结点的下一个节点
return node;//直接返回node
for(int i=1;i<index;i++){
node = node.getNext();//获取node的下一个节点
}
return node;
} }

上面所述的是我们的单向链表,但是同时也具有双向的链表。

public class Node<E> {

    private E e;// 数据域
private Node<E> next;// 引用域
private Node<E> last;//引用域 public Node() {
} public Node(E e) {
this.e = e;
} public E getE() {
return e;
} public void setE(E e) {
this.e = e;
} public Node<E> getNext() {
return next;
} public void setNext(Node<E> next) {
this.next = next;
}
public Node<E> getLast(){
return last;
}
public void setLast(Node<E> last){
this.last = last;
} }

这上面就是双向链表的链表结构,我们也就是仅仅的添加了两个功能和一个变量而已,这个变量就是节点的上一个节点。而新的功能就是查找节点的上一节点的能力。

java之链表的更多相关文章

  1. JAVA单向链表实现

    JAVA单向链表实现 单向链表 链表和数组一样是一种最常用的线性数据结构,两者各有优缺点.数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点 ...

  2. Java单链表反转 详细过程

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实 ...

  3. Java 单向链表学习

    Java 单向链表学习 链表等同于动态的数组:可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式:链表的使用可以更加便于操作. 链表的基本结构包括:链表工具类和节点类, ...

  4. java 单链表 练习

    练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链 ...

  5. java ListNode 链表

    链表是一种数据结构:由数据和指针构成,链表的指针指向下一个节点. java ListNode 链表 就是用Java自定义实现的链表结构. 基本结构: class ListNode { //类名 :Ja ...

  6. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  7. java实现链表

    单链表 package com.voole.linkedlist; public class Test { public static void main(String[] args) { Linke ...

  8. Java关于链表的增加、删除、获取长度、打印数值的实现

    package com.shb.java; public class Demo8 { public Node headNode = null; /** * @param args * @date 20 ...

  9. Java单链表的实现

    将结点Node进行封装,假设Node的操作有增加,删除,查找,打印几个操作.将Node实现为链表Link的内部类,简化代码. package Chapter5; import java.securit ...

  10. java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

随机推荐

  1. scheduler configuration options

    Table 4.53. Description of scheduler configuration options Configuration option = Default value Desc ...

  2. java中i=i++问题分析

    http://www.ticmy.com/?p=43 重点:局部变量表 和 操作数栈的执行过程. 使用javac编译后再使用javap -c Test反编译这个类查看它的字节码,如下(只摘取main方 ...

  3. ControlTemplate,ItemsPanelTemplate,DataTemplate(wpf)

    在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板, ...

  4. 转:autofac在mvc和webapi集成的做法

    本文转自:http://www.cnblogs.com/Hai--D/p/5992573.html var builder = new ContainerBuilder(); // Mvc Regis ...

  5. C++的坑真的多吗

    先说明一下,我不希望本文变成语言争论贴.希望下面的文章能让我们客观理性地了解C++这个语言.(另,我觉得技术争论不要停留在非黑即白的二元价值观上,这样争论无非就是比谁的嗓门大,比哪一方的观点强,毫无价 ...

  6. Windows 10 Certified with Oracle E-Business Suite

    Microsoft Windows 10 (32-bit and 64-bit) is certified as a desktop client operating system for end-u ...

  7. LeetCode OJ:Lowest Common Ancestor of a Binary Search Tree(最浅的公共祖先)

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  8. uva10815(set的应用)

    紫书例题,这道题的例程让我长了知识.以前没有用过cctype和stringstream相关的东西.很实用,值得学习. #include <cctype>的函数 c++中应该是#includ ...

  9. LeetCode 305. Number of Islands II

    原题链接在这里:https://leetcode.com/problems/number-of-islands-ii/ 题目: A 2d grid map of m rows and n column ...

  10. 学习动态性能表(9)--v$filestat

    学习动态性能表 第九篇--V$FILESTAT  2007.6.5 本视图记录各文件物理I/O信息.如果瓶颈与I/O相关,可用于分析发生的活动I/O事件.V$FILESTAT显示出数据库I/O的下列信 ...