单链表存储结构图解
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6d83879af538b1de2bcf24e02fa610f4.png)
定义单链表节点
public class LinkListNoed {
private Object date;
private LinkListNoed pNext;
public Object getDate() {
return date;
}
public void setDate(Object date) {
this.date = date;
}
public LinkListNoed getpNext() {
return pNext;
}
public void setpNext(LinkListNoed pNext) {
this.pNext = pNext;
}
@Override
public void finalize() {
try {
super.finalize();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
定义单链表
public class LinkList {
public LinkListNoed head;
public LinkListNoed p;
}
链表初始化类
public class LinkListInitial extends LinkList{
public LinkListInitial() {
LinkListNoed headNode = new LinkListNoed();
super.head = headNode;
super.p = super.head;
super.p.setpNext(null);
super.p.setDate(null);
}
}
链表操作工具类
import sun.plugin.javascript.navig.Link;
public class LinkLIstOparat {
public void AddElementEnd(LinkListNoed newLinkListNode, LinkList link) {
link.p.setpNext(newLinkListNode);
link.p = newLinkListNode;
}
public void AddElementHead(LinkListNoed newLinkListNode, LinkList link) {
newLinkListNode.setpNext(link.p);
link.head.setpNext(newLinkListNode);
link.p = newLinkListNode;
}
public LinkListNoed FindElement(Object obj, LinkList link) {
link.p = link.head;
boolean flag = false;
while (link.p.getpNext() != null) {
link.p = link.p.getpNext();
if (obj.equals(link.p.getDate())) {
flag = true;
break;
}
}
if (!flag) {
throw new RuntimeException("链表中不存在该元素!");
}
return link.p;
}
public void insert(LinkListNoed noed,Object obj,LinkList link){
LinkListNoed noed1 = FindElement(obj,link);
noed.setpNext(noed1.getpNext());
noed1.setpNext(noed);
}
public void delete(Object obj, LinkList link) {
LinkListNoed temp = null;
link.p = link.head;
boolean flag = false;
while (link.p.getpNext() != null) {
temp = link.p;
link.p = link.p.getpNext();
if (link.p.getDate().equals(obj)) {
flag = true;
break;
}
}
if (!flag) {
throw new RuntimeException("链表中不存在该元素!");
}
temp.setpNext(link.p.getpNext());
link.p.finalize();
}
public void modifiyElement(Object obj1, Object obj2, LinkList link) {
link.p = link.head;
boolean flag = false;
while (link.p.getpNext() != null) {
link.p = link.p.getpNext();
if (obj1.equals(link.p.getDate())) {
flag = true;
break;
}
}
if (!flag) {
throw new RuntimeException("链表中不存在该元素!");
}
link.p.setDate(obj2);
}
public int getLength(LinkList link) {
int count = 0;
link.p = link.head;
while (link.p.getpNext()!=null){
link.p = link.p.getpNext();
count++;
}
return count;
}
public String toString(LinkListNoed linkListNoed) {
final StringBuffer sb = new StringBuffer("LinkLIstOparat{");
String s = String.valueOf(linkListNoed);
sb.append('}');
return sb.toString();
}
}
测试类
public class Test {
public static void main(String[] args) {
LinkList link = new LinkListInitial();
LinkLIstOparat lo = new LinkLIstOparat();
LinkListNoed lln = new LinkListNoed();
lln.setDate("data1");
lo.AddElementEnd(lln,link);
LinkListNoed lln1 = new LinkListNoed();
lln1.setDate("data2");
lo.AddElementEnd(lln1,link);
LinkListNoed lln2 = new LinkListNoed();
lln.setDate("data3");
lo.AddElementEnd(lln2,link);
LinkListNoed lln3 = new LinkListNoed();
lln.setDate("data4");
lo.AddElementEnd(lln3,link);
System.out.println("链表长度:"+lo.getLength(link));
LinkListNoed noed = new LinkListNoed();
noed.setDate("data0");
lo.insert(noed,"data2",link);
System.out.println("链表长度:"+lo.getLength(link));
lo.delete("data4",link);
System.out.println("链表长度:"+lo.getLength(link));
LinkListNoed p = lo.FindElement("data2",link);
System.out.println("查找方法返回节点数据域为:"+p.getDate());
lo.modifiyElement("data2","dataX",link);
System.out.println("替换的元素:"+lo.FindElement("dataX",link).getDate());
System.out.print("已经删除的元素: ");
System.out.print(String.valueOf(lo.FindElement("data2",link))+"\n");
}
}