结点类:

 /**
* @author zhengbinMac
* 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系。
*/
public class OnelinkNode {
// 保存结点的值
public int data;
// 保存后继结点的引用
public OnelinkNode next;
// 构造值为k的结点
public OnelinkNode(int k) {
data = k;
next = null;
}
// 初始化单向链表
public OnelinkNode() {
this(0);
}
}

单向链表类:

 /**
* @author zhengbinMac
* Onelink1类的一个对象表示一条单向链表,成员变量head作为链表的头指针,指向
* 链表的第一个结点。head为被保护的(protected),可被其子类继承。
* 当head为null时,表示链表为空,元素个数为0。
*/
public class Onelink1 {
// 指向链表的第一个结点
protected OnelinkNode head;
// 创建一个空的单向链表
public Onelink1() {
head = null;
}
// 构造由h1指向的单向链表
public Onelink1(OnelinkNode h1) {
head = h1;
}
/**
* 判断链表是否为空
*/
public boolean isEmpty() {
return head == null;
}
/**
* 以n个随机值建立单向链表
*/
public Onelink1(int n) {
OnelinkNode rear,q;
if(n > 0) {
int k = (int)(Math.random() * 100);//产生随机数,加入链表
head = new OnelinkNode(k);
rear = head;
for(int i = 1;i < n;i++) {
k = (int)(Math.random() * 100);
q = new OnelinkNode(k);
rear.next = q;
rear = q;
}
}
}
/**
* 返回链表的长度
*/
public int length() {
int n = 0;
OnelinkNode p = head;
while(p != null) {
n++;
p = p.next;
}
return n;
}
/**
* 输出链表
*/
public void output() {
this.output(head);
}
private void output(OnelinkNode head) {
System.out.print(this.getClass().getName() + ": ");
while(head != null) {
System.out.print(head.data);
head = head.next;
if(head != null) {
System.out.print(" -> ");
}
}
System.out.println();
}
}

单向链表的反转:

 /**
* @author zhengbinMac
*/
public class Onelink2 extends Onelink1{
public Onelink2() {
super();
}
public Onelink2(int n) {
super(n);
}
public void reverse() {
OnelinkNode p = this.head, q = null, front = null;
/*
* 以下面这个链表为例:
* 1->2->3->4
*/
while(p != null) {
q = p.next; // p = 1, q = 2;
p.next = front;   // 1.next = null;下次循环将变为:2.next = 1;
front = p; // front = 1;
p = q; // p = 2;
}
this.head = front;// 循环结束后,front指向原链表的最后一个结点,
}
public static void main(String[] args) {
Onelink2 h2 = new Onelink2(5);
h2.output();
System.out.println("Reverse!");
h2.reverse();
h2.output();
}
}

在线编程:

牛客网——《剑指Offer》-反转链表

数据结构——Java实现单向链表的更多相关文章

  1. Java实现单向链表基本功能

    一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...

  2. C语言 - 基础数据结构和算法 - 单向链表

    听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...

  3. JS数据结构与算法--单向链表

    链表结构:链表中每个元素由一个存储元素本身的节点和一个指向下一元素的引用组成.如下所示(手画的,比较丑,懒得用工具画了,嘻嘻) 1.append方法,向链表末尾插入一个节点 2.insert(posi ...

  4. java实现单向链表的增、删、改、查

    单向链表 作者:vashon package com.ywx.link; /** * 单向链表 * @author vashon * */ public class LinkTest { public ...

  5. 数据结构——Java实现单链表

    一.分析 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点由元素和指针构成.在Java中,我们可以将单链表定义成一个类,单链表的基 ...

  6. java 实现单向链表

    package cn.com.factroy2; /** * 可以看做是操作链表的工具类,链表的核心结构就是节点的数据结构 * @author wanjn * */ public class Sing ...

  7. Java实现单向链表

    /* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */class LNode{//这个写法已经 ...

  8. 线性数据结构案例1 —— 单向链表中获取倒数k个节点

    一.介绍  先遍历整个链表获取链表长度length,然后通过 (length-index) 方式得到我们想要节点在链表中的位置. 二.代码 public Node findLastIndexNode( ...

  9. Java实现单向链表的增删改查

    class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...

随机推荐

  1. Linux多线程之同步

    引言 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu):另一个线程使条件成立(给出条件成立信号).为了防止竞争,条件变 ...

  2. 编程实现LINUX下目录的层层遍历

    /************************************************************************* > File Name: treedir.c ...

  3. C语言一些常用内存分配函数

    首先看个问题程序(这里用的是TC编译器): #include "stdlib.h" #include "stdio.h" void main() {    in ...

  4. Android安卓开发环境搭建详细教程

    安装目录:步骤1 安装JDK步骤2 安装 Android SDK ----http://www.androiddevtools.cn/ 步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclip ...

  5. lintcode: 最小调整代价

    题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...

  6. Python3导入自定义模块的3种方式

    前话 最近跟着廖雪峰的教程学到 模块 这一节.关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/001431608955 ...

  7. Spring笔记——使用Spring进行面向切面(AOP)编程

    要进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间: =================== Spring提供了两种切面声明方式,实际工作中我们可以选用其中一种: 1. 基于XM ...

  8. 在db2中 两个数据库之间的两个表的联合查询

    大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...

  9. MyBatis学习总结_19_Mybatis传多个参数(三种解决方案)

    据我目前接触到的传多个参数的方案有三种. 第一种方案  DAO层的函数方法  Public User selectUser(String name,String area); 对应的Mapper.xm ...

  10. CentOS系统中常用查看日志命令

    cat tail -f 日 志 文 件 说    明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安 ...