链表是由一个又一个的节点组成的,每个节点都包括节点值以及下一个节点的存储地址。
首先先看节点类
package test;
/**
* @author Marospring
* @version 创建时间:2012-7-25 上午11:46:23
* 单链表节点
*/
public class LinkNode {
public char value;
public LinkNode next;
}
这是一个节点类,为了表述方便,这里我没有写setter和getter,直接将属性设置成public,在操作节点的时候直接用“=”,这里可以理解为指向的意思。下面先看图再看代码。
package test;
/**
* @author Marcospring
* @version 创建时间:2012-7-25 上午11:46:41
* 单链表
*/
public class LinkedList{
private LinkNode head;
private LinkNode tail;
private int size;
public LinkedList(){
this.size = 0;
}
//添加元素
public void add(char c){
LinkNode node = new LinkNode();
node.value = c;
if(size == 0){
//如果链表为空则将头节点和尾节点都指向新加入的节点
head = node;
tail = node;
}else{
//如果不为空,则先将为加入新节点前的为节点的next指向新节点,然后将尾元素赋值为新节点
tail.next = node;
tail = node;
}
size++;
}
//在指定位置添加元素
public void add(int index,char c){
LinkNode node = new LinkNode();
node.value = c;
LinkNode temp = new LinkNode();
temp = head;
//寻找要加入节点的位置,要找到加入位置的前一个节点。
for(int i=0;i<index-1;i++){
temp = temp.next;
}
//将要添加节点的next指向找到节点的next
node.next = temp.next;
//将找到节点的next指向新加入的节点。
temp.next = node;
size++;
}
//删除指定位置的元素
public void remove(int index){
LinkNode temp = new LinkNode();
temp = head;
//找到要删除元素的前一个节点
for(int i = 0;i<index-1;i++){
temp = temp.next;
}
//要删除节点的前一个元素的next指向它的下下个元素
temp.next = temp.next.next;
size--;
}
//清空链表
public void clear(){
head =null;
tail = null;
size = 0;
}
//是否包含某元素
public boolean contain(char c){
LinkNode temp = new LinkNode();
temp = head;
for(int i=0;i<size-1;i++){
if(temp.value == c){
return true;
}else{
temp = temp.next;
}
}
return false;
}
//链表大小
public int size(){
return size;
}
//获得制定位置元素
public char get(int index){
LinkNode node = new LinkNode();
node = head;
if(index > size){
//这里可以拋异常,我选择打印,然后返回“!”
System.out.println("您访问的元素不存在!");
return '!';
}else{
for(int i=0;i<index-1;i++){
node = node.next;
}
return node.value;
}
}
//展示链表
public void display(){
LinkNode node = new LinkNode();
node = head;
for(int i = 0;i<size;i++){
System.out.print(node.value+",");
node = node.next;
}
}
}
这里要注意的是在指定位置添加节点的这个方法,如果先将找到节点的next指向新加入的节点,然后再将新加入节点的next指向找到节点的next会出现什么情况呢?
- 大小: 130 KB
分享到:
相关推荐
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
java单向链表代码实现
java单向链表的实现实例。需要的朋友可以过来参考下,希望对大家有所帮助
操作包括: 1. 在头部添加结点 2. 在尾部添加结点 3. 遍历 4. 逆置 5. 删除
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
java语言模拟单向链表,JAVA数据结构
约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表
这个说起来也简单就是把1-2-3-4-5这样的链表逆序构建或打印出来5-4-3-2-1。比如用后进先出的栈的特性来做:就是按照链表的顺序把数据压入栈中,再打印栈
04.单向链表以及单向链表的应用.ppt
培训班老师自己写的单向链表,代码非常全,也很好理解,可执行。
Amazon 面试题,如何用O(N)实现在链表中找出 是否出现循环(Loop),算法也可以用在其他语言(C,C++等)
主要为大家详细介绍了Java实现单向链表反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...
附件是Java版逆序单向链表的实现,一个.java 文件,编译后即可运行,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 代码首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了...
一个java实例,用来描述java算法中链表的使用。
附件是.java 文件,实现了单链表的逆序算法,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法...
类似约瑟夫环问题。有一群人组成一个圈。从头开始按照顺时针方向从1开始依次报数。报到到9的人就离开圈子。其左手边的人接着从1开始报数。依此进行,直到剩最后一个人为止。
主要给大家介绍了关于Java实现单向链表基本功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释