链表的概念
数组作为数据存储结构的缺陷;
在无序数组中,搜索是低效的
而在有序数组中插入效率又低下
不管在那一种数组中删除效率都很低
创建一个数组后,它的大小是不可变的
链表:
链表可以是一种有序或无序的列表
链表的内容通常存储在内存中分散的位置上
链表由节点组成,每一个节点的结构相同
节点分为数据域,和链域,数据域是存放节点的内容,链域是存放下一个节点的指针
链表的基本运算
链表建立也称为链表的初始化:
链表中第一个节点,我们称为头结点,头节点的结构饿普通节点一样
通常我们会在链表初始时指定。
链表中的最后一个节点为空节点,在程序中表示为NUL目的为避免抛出
空指针异常。
class Node{
public String id;
public Node next;
public Node() {
}
public Node(String id) {
this(id,null);
}
public Node(String id,Node next) {
this.id=id;
this.next=next;
}
}
public class Link {
Node head;
public Link() {
head=new Node();
head.next=null;
}
public void addNode(String data) {
/**
* 1.获取表头
* 2.通过表头找到最后一个元素
* 3.把新增的节点放到最后一个元素的后面
*/
Node p=head;
while(p.next!=null) {
p=p.next;
}
Node temp=new Node(data);
p.next=temp;
}
public void deleteNode(String data) {
/**
* 1.获取表头
* 2.通过表头找到最后一个元素
* 3.把最后一个元素删除
*/
Node p=head;
if(p.next==null) {
}
while(p.next!=null) {
if(p.next.id.equals(data)) {
p.next=p.next.next;
break;
}
else {
p=p.next;
}
}
}
public void display() {
Node p=head;
while(p.next!=null) {
System.out.println("->>"+p.next.id);
p=p.next;
}
}
public void findNode(String data) {
/**
* 1.获取表头
* 2.通过表头找到该元素元素
* 3.把最后一个元素删除
*/
Node p=head;
if(p.next==null) {
}
while(p.next!=null) {
if(p.next.id.equals(data)) {
System.out.println("data"+p.next.id);
break;
}
else {
p=p.next;
}
}
}
public void insertNode(String param,String data) {
Node p=head;
while(p.next!=null) {
if(p.next.id.equals(param)) {
Node temp=p.next;
Node insertNode=new Node(data);
insertNode.next=temp.next;
temp.next=insertNode;
break;
}else {
p=p.next;
}
}
}
public int size() {
Node p=head;
int n=0;
while(p.next!=null) {
p=p.next;
n++;
}
return n;
}
public static void main(String[] args) {
Link link=new Link();
link.addNode("组长");
link.addNode("部门经理");
link.addNode("主管副总");
link.addNode("总经理");
link.display();
System.out.println(link.size());
link.deleteNode("部门经理");
link.display();
System.out.println(link.size());
link.insertNode("组长","部门经理");
link.display();
System.out.println(link.size());
System.out.println("=================");
link.insertNode("总经理","董事长");
link.display();
System.out.println(link.size());
}
}