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

方法应该有增删改查、定位、输出、获取链表长度、排序、链表读入、链表输出。下面是我用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. iOS与导航相关的都在这

    // 设置导航背景图片 (一旦设置背景图片(变为不透明),透明层不起作用) [self.navigationBar setBackgroundImage:[UIImage imageNamed:@&q ...

  2. 墨菲定律(Murphy's Law)

    https://baike.baidu.com/item/墨菲定律/746284?fr=aladdin 墨菲定律是一种心理学效应,是由 爱德华·墨菲(Edward A. Murphy)提出的. 主要内 ...

  3. SQL与Access使用查询结果集更新表

    SQL语法 update 表1 set 字段1 = bb.字段1 from 表1 as aa, (select 字段1,字段2 from 表) bb where aa.字段2 = bb.字段2 Acc ...

  4. 《深入理解Linux内核》阅读笔记 --- 第四章 中断和异常

    1.中断的作用:中断信号提供了一种方式,使处理器转而去运行正常控制流之外的代码.当一个中断信号到达时,CPU必须停止它当前所做的事,并切换到一个新的活动.为了做到这一点,就要在内核态堆栈保存程序计数器 ...

  5. 48dp rhythm

  6. 部门人员能力模型的思考:海军 or 海盗——By Me

    我们欢迎您的加入,与我们一起推动安全可视化团队的成长,实现技术上共同进步和感情上的更多互相支持!

  7. Nhibernate工具Profiler配置

    1.使用之前需要确认Framework的Version,如果是4.0那么使用如下程序集需要在 创建ISessionFactory的项目中引用NHProfiler安装目录下的 HibernatingRh ...

  8. UTC和时间相互转换

    // ToLocalTime() UTC时间转换为本地时间 public static DateTime UtcToDateTime(long number) { , , , , , , ).AddS ...

  9. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类

    近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...

  10. Ubuntu更新Hostname和hosts

    一.概述 Hostname 即主机名,一般存放在 /etc/hostname 中.hosts 即本地域名解析文件,存放在 /etc/hosts 中. 二.测试 2.1 hostname 2.2 hos ...