结点类:

 /**
* @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客户/服务器程序设计范式2——并发服务器(进程池)

    引言 让服务器在启动阶段调用fork创建一个子进程池,通过子进程来处理客户端请求.子进程与父进程之间使用socketpair进行通信(为了方便使用sendmsg与recvmsg,如果使用匿名管道,则无 ...

  2. lintcode:买卖股票的最佳时机 IV

    买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...

  3. java多线程理解2

    1. 什么时候必须同步?什么叫同步?如何同步? 要跨线程维护正确的可见性,只要在几个线程之间共享非 final 变量,就必须使用 synchronized(或 volatile)以确保一个线程可以看见 ...

  4. JavaPersistenceWithHibernate第二版笔记-第四章-Mapping persistent classes-002identity详解

    一.简介 1.You now have three methods for distinguishing references:  Objects are identical if they occ ...

  5. android学习笔记二:Intent

    1.Intent作用 协助完成各个组建间的通信.如activity间.启动service.Broadcast. 2.Intent构成 1.Componet name:要启动的目的组建. 2.Actio ...

  6. 机器人学 —— 机器人视觉(Bundle Adjustment)

    今天完成了机器人视觉的所有课程以及作业,确实是受益匪浅啊! 最后一个话题是Bundle Adjustment. 机器人视觉学中,最顶尖的方法. 1.基于非线性优化的相机位姿估计 之前已经在拟合一篇中, ...

  7. GLSL基础

    GLSL基础 OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言.因为GPU是多线程并行处理器,所以GLSL直接面向SIMD模型的多线程计算.G ...

  8. 汇编与C语言混合 实现的从小到大的冒泡排序

    汇编实现的从小到大的冒泡排序 主函数由C语言实现,sort函数用汇编语言写 #include <stdio.h>  int buffer[256];      //数据缓冲区  int   ...

  9. windows下的文件遍历(使用CFindFile)

    这个我一直都很想做了,前两天开始准备,查找了一下CFindFile的资料,然后把思路理清楚,就直接开始做了. 文件系统是一个操作系统以一部分,所以想文件操作,基本上就要依赖于操作系统提供的接口函数. ...

  10. IntelliJ IDEA12.1.1 使用 相关记录

    最近在切换ide 从eclipse平台上转移到   IDEA 其它的都比较容易,让我烦恼的是使用idea 发布工程,使用tomcat 调试 热部署.期间碰到各种问题,纠结好久了:终于成功完成了,特意记 ...