对于一个单链表来说,要求有最基本的数据节点以及一些重要的方法。

方法应该有增删改查、定位、输出、获取链表长度、排序、链表读入、链表输出。下面是我用java写的单链表

public class List {

    public class Node{//定义节点
public int data;
public Node next;
public Node(int data){
this.data = data;
}
} private Node head;//头节点 public Node getHead(){
return head;
} public int getLength()//得到链表长度
{
Node node = head;
int k = 0;
while(node != null){
k++;
node = node.next;
}
return k;
} public Node Locate(int index){//定位位于第index位置的节点
if(index <= 0)return null;
Node node = head;
int k = 1;
while(node != null && k < index){
k++;
node = node.next;
}
return node;
} public void input(int n){//链表输入
if(n <= 0)return;
Scanner reader = new Scanner(System.in);
int value = reader.nextInt(); head = new Node(value);
Node node = head;
int k = 1;
while(k < n){
k++;
value = reader.nextInt();
node.next = new Node(value);
node = node.next;
}
} public void print(){//链表输出
Node node = head;
while(node != null){
System.out.print(node.data + " ");
node = node.next;
}
} public void insert(int index, Node node){//链表插入
if(index <= 0 || index > getLength())return;
Node cur = Locate(index);
node.next = cur.next;
cur.next = node;
} public void delete(int index){//删除节点
if(index <= 0 || index > getLength())return;
Node node = Locate(index - 1); Node del = node.next;
node.next = del.next;
} public void setData(int index, int data){//修改节点数据
if(index <= 0 || index > getLength())return;
Node node = Locate(index);
node.data = data;
} public int getData(int index){//得到节点数据
if(index <= 0 || index > getLength())return -1;
Node node = Locate(index);
return node.data;
} public void sort(){//用冒泡排序对链表进行排序
Node cur = head;
Node tmp = null;
while(cur != tmp){
while(cur.next != tmp){
if(cur.data > cur.next.data){
int temp = cur.data;
cur.data = cur.next.data;
cur.next.data = temp;
}
cur = cur.next;
}
tmp = cur;
cur = head;
}
}
}

测试代码如下:

public static void main(String[] args) {
List L = new List();
System.out.println("请输入链表中的数据");
L.input(6); System.out.println("链表的长度为:" + L.getLength());
System.out.println("排序后的链表为");
L.sort();
L.print(); L.setData(4, 1000);
System.out.println("把第4个数据修改为1000, 修改后如下");
L.print(); System.out.println("链表中第3个数据为: " + L.getData(3)); L.delete(2);
System.out.println("删除链表中的第2个数据后,结果如下");
L.print(); }

运行结果如下:

用java实现单链表的更多相关文章

  1. Java实现单链表的各种操作

    Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素   4.实现链表的反转   5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...

  2. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  3. JAVA数据结构——单链表

    链表:一. 顺序存储结构虽然是一种很有用的存储结构,但是他有如下几点局限性:1. 因为创造线性表的时候已经固定了空间,所以当需要扩充空间时,就需要重新创建一个地址连续的更大的存储空间.并把原有的数据元 ...

  4. 使用java实现单链表(转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html)

    使用java实现单链表----(java中的引用就是指针)转载自:https://www.cnblogs.com/zhongyimeng/p/9945332.html ? 1 2 3 4 5 6 7 ...

  5. 用Java实现单链表的基本操作

    笔试题中经常遇到单链表的考题,下面用java总结一下单链表的基本操作,包括添加删除节点,以及链表转置. package mars; //单链表添加,删除节点 public class ListNode ...

  6. java实现单链表常见操作

    一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashM ...

  7. Java实现单链表的快速排序和归并排序

    本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...

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

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

  9. Java实现单链表翻转

    单链表翻转比方有例如以下链表: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3NoaXp0eQ==/font/5a6L5L2T/fontsize ...

随机推荐

  1. 让select下的option选中

    这里以默认选中当前月为例: HTML: 性别 <select name="sex" id="sex"> <option value=" ...

  2. 用gunicorn+gevent启动Flask项目

    转自:https://blog.csdn.net/dutsoft/article/details/51452598 Flask,webpy,Django都带着 WSGI server,当然性能都不好, ...

  3. Java 集合框架工具类

    Collections Arrays Collections 集合框架的工具类, 里面的方法都是静态的, 可以直接使用类名调用 常用方法 1. sort(List<T> list); // ...

  4. ubuntu14.04 编译安装CPU版caffe

      本文,试图中一个干净的ubuntu14.04机器上安装caffe的cpu版本. http://blog.csdn.net/sinat_35188997/article/details/735304 ...

  5. PyMongo和MongoEngine

    参见 http://stackoverflow.com/questions/5712857/pymongo-vs-mongoengine-for-django https://api.mongodb. ...

  6. make编译五

    Make的运行 有时候,我们不想让我们的makefile 中的规则执行起来,我们只想检查一下我们的命令,或是执行的序列.于是我们可以使用make 命令的下述参数: “-n” “--just-print ...

  7. GIL解释器,协程,gevent模块

    GIL解释器锁 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CP ...

  8. LeetCode:二进制手表【401】

    LeetCode:二进制手表[401] 题目描述 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右 ...

  9. Android 属性自定义及使用获取浅析

    一.概述 相信你已经知道,Android 可使用 XML 标签语言进行界面的定义.每个标签中有一个一个的属性,这些属性有相应的属性值.例如: <cn.neillee.composedmenu.R ...

  10. Linux yum源地址

    ----------------------------------Linux yum源地址------------------------------ Zabbix 3.0 yum源 rpm -iv ...