Java单链表基本操作的实现

所属分类: 软件编程 / java 阅读数: 33
收藏 0 赞 0 分享

最近被问到链表,是一个朋友和我讨论Java的时候说的。说实话,我学习编程的近一年时间里,学到的东西还是挺少的。语言是学了Java和C#,关于Web的学了一点Html+css+javascript。因为比较偏好,学习WinForm时比较认真,数据库操作也自己有所研究。但链表这个东西我还真没有学习和研究过,加上最近自己在看WPF,而课程也到了JSP了,比较紧。

但是我还是抽了一个晚上加半天的时间看了一下单向链表。并且使用Java试着写了一个实例出来。没有接触过链表的朋友可以作为参考,希望大家多提宝贵意见。

我们首先解释一下什么是链表。就我所知,链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。我的老师说,链表在进行循环遍历时效率不高,但是插入和删除时优势明显。那么他有着愈十年的编程经验,我是相信的。不过不知道他是否是说双向链表,我们在此呢只对单向链表做一个了解。

链表(Chain本文所说链表均为单向链表,以下均简称单向链表)实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。而向外暴露的只有一个头节点(Head),我们对链表的所有操作,都是直接或者间接地通过其头节点来进行的。

节点(Node)是由一个需要储存的对象及对下一个节点的引用组成的。也就是说,节点拥有两个成员:储存的对象、对下一个节点的引用。

  这样说可能大家不是很明白,我贴一张图大家可能更容易理解。

Java单链表基本操作的实现关键代码如下所示:

package com.tyxh.link; 
//节点类 
public class Node { 
protected Node next; //指针域 
protected int data;//数据域 
public Node( int data) { 
this. data = data; 
} 
//显示此节点 
public void display() { 
System. out.print( data + " "); 
} 
} 
package com.tyxh.link; 
//单链表 
public class LinkList { 
public Node first; // 定义一个头结点 
private int pos = 0;// 节点的位置 
public LinkList() { 
this. first = null; 
} 
// 插入一个头节点 
public void addFirstNode( int data) { 
Node node = new Node(data); 
node. next = first; 
first = node; 
} 
// 删除一个头结点,并返回头结点 
public Node deleteFirstNode() { 
Node tempNode = first; 
first = tempNode. next; 
return tempNode; 
} 
// 在任意位置插入节点 在index的后面插入 
public void add(int index, int data) { 
Node node = new Node(data); 
Node current = first; 
Node previous = first; 
while ( pos != index) { 
previous = current; 
current = current. next; 
pos++; 
} 
node. next = current; 
previous. next = node; 
pos = 0; 
} 
// 删除任意位置的节点 
public Node deleteByPos( int index) { 
Node current = first; 
Node previous = first; 
while ( pos != index) { 
pos++; 
previous = current; 
current = current. next; 
} 
if(current == first) { 
first = first. next; 
} else { 
pos = 0; 
previous. next = current. next; 
} 
return current; 
} 
// 根据节点的data删除节点(仅仅删除第一个) 
public Node deleteByData( int data) { 
Node current = first; 
Node previous = first; //记住上一个节点 
while (current. data != data) { 
if (current. next == null) { 
return null; 
} 
previous = current; 
current = current. next; 
} 
if(current == first) { 
first = first. next; 
} else { 
previous. next = current. next; 
} 
return current; 
} 
// 显示出所有的节点信息 
public void displayAllNodes() { 
Node current = first; 
while (current != null) { 
current.display(); 
current = current. next; 
} 
System. out.println(); 
} 
// 根据位置查找节点信息 
public Node findByPos( int index) { 
Node current = first; 
if ( pos != index) { 
current = current. next; 
pos++; 
} 
return current; 
} 
// 根据数据查找节点信息 
public Node findByData( int data) { 
Node current = first; 
while (current. data != data) { 
if (current. next == null) 
return null; 
current = current. next; 
} 
return current; 
} 
} 
package com.tyxh.link; 
//测试类 
public class TestLinkList { 
public static void main(String[] args) { 
LinkList linkList = new LinkList(); 
linkList.addFirstNode(20); 
linkList.addFirstNode(21); 
linkList.addFirstNode(19); 
//19,21,20 
linkList.add(1, 22); //19,22,21,20 
linkList.add(2, 23); //19,22,23,21,20 
linkList.add(3, 99); //19,22,23,99,21,20 
linkList.displayAllNodes(); 
// Node node = linkList.deleteFirstNode(); 
// System.out.println("node : " + node.data); 
// linkList.displayAllNodes(); 
// node = linkList.deleteByPos(2); 
// System.out.println("node : " + node.data); 
// linkList.displayAllNodes(); 
// linkList.deleteFirstNode(); 
Node node = linkList.deleteByData(19); 
// Node node = linkList.deleteByPos(0); 
System. out.println( "node : " + node. data); 
linkList.displayAllNodes(); 
Node node1 = linkList.findByPos(0); 
System. out.println( "node1: " + node1. data); 
Node node2 = linkList.findByData(22); 
System. out.println( "node2: " + node2. data); 
} 
}

以上所述是小编给大家介绍的Java单链表基本操作的实现,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多