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;
}
}

构建一个单链表类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");
    }
}

构建一个测试类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("销毁完成。");
}
}
原创粉丝点击