Java单链表的实现
来源:互联网 发布:守望先锋性能数据fps 编辑:程序博客网 时间:2024/06/14 22:48
Java单链表的实现
构建一个结点类LNode
package com.SigleLinkList;
/*
* 结点类
*/
public class LNode {
public char data;
public LNode next;//类型要使用LNode,因为结点指向结点.next必须是同类型的
//无参构造方法
public LNode() {
}
//在构造节点的时候就能赋值,方便在插入结点的时候使用
public LNode(char data) {
this.data = data;
}
}
/*
* 结点类
*/
public class LNode {
public char data;
public LNode next;//类型要使用LNode,因为结点指向结点.next必须是同类型的
//无参构造方法
public LNode() {
}
//在构造节点的时候就能赋值,方便在插入结点的时候使用
public LNode(char data) {
this.data = data;
}
}
构建一个单链表类Linklist,结点的增删,链表的打印,销毁,初始化,查找均为内置方法
package com.SigleLinkList;
/*
* 单链表
*/
public class LinkedList {
LNode head;
//无参构造函数
public LinkedList() {
}
//链表的初始化,头指针
public void Inital_LinkedList() {
LNode frist = new LNode();
frist.data = 0;
frist.next = null;
head = frist;
}
//判断链表是否为空
public boolean IsEmpty() {
if(head.next!=null) {
System.out.println("非空");
return true;
}
else {
System.out.println("该链表为空");
return false;
}
}
//增加结点
public boolean Add_LNode(int i,char data) {
LNode p = head;
LNode q = new LNode(data);
int j = 0; //从头结点开始
while(j<i-1&&p!=null) {
j++;
p = p.next;
}
if(p==null){
System.out.println("插入失败");
return false;
}
else {
//找到了需要插入的位置的前面i-1
if(p.next!=null)
q = p.next;
p.next = q;
return true;
}
}
//删除结点
public boolean Delect_LNdoe(int i) {
LNode p = head;
LNode q = new LNode();//要删除的结点
int j = 0; //从头结点开始遍历
while(j<i-1&&p!=null) {
//找出要删除的结点的前一个结点
j++;
p = p.next;
}
if(p==null) {
System.out.println("删除失败,该位置不存在结点");
return false;
}
else {
q = p.next;
p.next = q.next;
q.next = null;
return true;
}
}
//根据位置查找元素
public char Seek_Element(int i) {
int j = 1; //从首元结点开始查找
LNode p = head.next;
while(j<i&&p!=null) {
j++;
p = p.next;
}
if(p==null) {
System.out.println("该位置不存在");
return 0;
}
else {
// System.out.println(p.data);
return (p.data);
}
}
//根据元素找位置
public int Seek_Location(char data){
LNode p = head.next;//从首元结点开始找
int i = 1;
while(p!=null&&p.data!=data) {
i++;
p = p.next;
}
if(p==null) {
System.out.println("不存在才元素");
return 0;
}
else
return i;
}
//销毁链表
public void DestoryList() {
head = null;
}
//打印链表
public void Print_List() {
LNode p = head.next;//从首元结点开始
while(p!=null) {
System.out.print(p.data);
p = p.next;
}
System.out.println("\n");
}
}
/*
* 单链表
*/
public class LinkedList {
LNode head;
//无参构造函数
public LinkedList() {
}
//链表的初始化,头指针
public void Inital_LinkedList() {
LNode frist = new LNode();
frist.data = 0;
frist.next = null;
head = frist;
}
//判断链表是否为空
public boolean IsEmpty() {
if(head.next!=null) {
System.out.println("非空");
return true;
}
else {
System.out.println("该链表为空");
return false;
}
}
//增加结点
public boolean Add_LNode(int i,char data) {
LNode p = head;
LNode q = new LNode(data);
int j = 0; //从头结点开始
while(j<i-1&&p!=null) {
j++;
p = p.next;
}
if(p==null){
System.out.println("插入失败");
return false;
}
else {
//找到了需要插入的位置的前面i-1
if(p.next!=null)
q = p.next;
p.next = q;
return true;
}
}
//删除结点
public boolean Delect_LNdoe(int i) {
LNode p = head;
LNode q = new LNode();//要删除的结点
int j = 0; //从头结点开始遍历
while(j<i-1&&p!=null) {
//找出要删除的结点的前一个结点
j++;
p = p.next;
}
if(p==null) {
System.out.println("删除失败,该位置不存在结点");
return false;
}
else {
q = p.next;
p.next = q.next;
q.next = null;
return true;
}
}
//根据位置查找元素
public char Seek_Element(int i) {
int j = 1; //从首元结点开始查找
LNode p = head.next;
while(j<i&&p!=null) {
j++;
p = p.next;
}
if(p==null) {
System.out.println("该位置不存在");
return 0;
}
else {
// System.out.println(p.data);
return (p.data);
}
}
//根据元素找位置
public int Seek_Location(char data){
LNode p = head.next;//从首元结点开始找
int i = 1;
while(p!=null&&p.data!=data) {
i++;
p = p.next;
}
if(p==null) {
System.out.println("不存在才元素");
return 0;
}
else
return i;
}
//销毁链表
public void DestoryList() {
head = null;
}
//打印链表
public void Print_List() {
LNode p = head.next;//从首元结点开始
while(p!=null) {
System.out.print(p.data);
p = p.next;
}
System.out.println("\n");
}
}
构建一个测试类Test,测试单链表
package com.SigleLinkList;
/*
* 测试单链表的类
*/
public class Test {
public static void main(String[] args) {
LinkedList linklist = new LinkedList();
System.out.println("单链表初始化");
linklist.Inital_LinkedList();
System.out.println("初始化完成,并插入abcde数据");
System.out.println("判断链表是否为空:");
linklist.IsEmpty();
linklist.Add_LNode(1, 'a');
linklist.Add_LNode(2, 'b');
linklist.Add_LNode(3, 'c');
linklist.Add_LNode(4, 'd');
linklist.Add_LNode(5, 'e');
System.out.println("\n输出单链表:");
linklist.Print_List();
System.out.println("判断链表是否为空:");
linklist.IsEmpty();
System.out.println("删除第三个位置的结点");
linklist.Delect_LNdoe(3);
System.out.println("输出单链表:");
linklist.Print_List();
System.out.println("查找第2个结点的数据:");
System.out.println(linklist.Seek_Element(2));
System.out.println("查找b的位置:");
System.out.println(linklist.Seek_Location('b'));
System.out.println("\n销毁链表");
linklist.head.next = null;//销毁链表,直接将头结点的next置为空
linklist.Print_List();
System.out.println("销毁完成。");
}
}
/*
* 测试单链表的类
*/
public class Test {
public static void main(String[] args) {
LinkedList linklist = new LinkedList();
System.out.println("单链表初始化");
linklist.Inital_LinkedList();
System.out.println("初始化完成,并插入abcde数据");
System.out.println("判断链表是否为空:");
linklist.IsEmpty();
linklist.Add_LNode(1, 'a');
linklist.Add_LNode(2, 'b');
linklist.Add_LNode(3, 'c');
linklist.Add_LNode(4, 'd');
linklist.Add_LNode(5, 'e');
System.out.println("\n输出单链表:");
linklist.Print_List();
System.out.println("判断链表是否为空:");
linklist.IsEmpty();
System.out.println("删除第三个位置的结点");
linklist.Delect_LNdoe(3);
System.out.println("输出单链表:");
linklist.Print_List();
System.out.println("查找第2个结点的数据:");
System.out.println(linklist.Seek_Element(2));
System.out.println("查找b的位置:");
System.out.println(linklist.Seek_Location('b'));
System.out.println("\n销毁链表");
linklist.head.next = null;//销毁链表,直接将头结点的next置为空
linklist.Print_List();
System.out.println("销毁完成。");
}
}
阅读全文
0 0
- Java单链表的实现
- 单链表的java实现
- java单链表的实现
- 单链表的Java实现
- Java实现的单链表
- 单链表的Java实现
- Java单链表的实现
- 单链表的反转java实现
- 单向单链表的java实现
- java 实现单链表的反转
- Java 实现的单链表翻转
- java 实现单链表的逆序
- 数据结构-单链表的java实现
- java 实现单链表的反转
- Java:实现单链表的创建
- Java对单链表的实现
- 单链表的反转-Java实现
- Java单链表的基本实现
- 代码汇总:图像质量评价Matlab代码分享
- 【我的Java笔记】递归练习_兔子问题
- mobileNet训练自己的样本
- 面向对象设计原则
- OpenGL从1.0开始--GLUT菜单
- Java单链表的实现
- 机器学习笔记四------集成学习
- 关于堆和栈的详细解释
- IDEA注册码/DataGrip注册码
- hibernate 缓存
- 浅谈Chrome开发者工具--- Console面板与常见报错类型
- 你好,层叠样式表
- Retrofit解决多个BaseURL切换的问题
- CentOS6.3安装AMP 和 phpMyadmin