package com.wyl.linklist;
public class MyLinkList {
private Node head; //链表的起始节点
private int size = 0; //记录链表的长度
/**
* 定义内部节点类
* @author wyl
*
*/
class Node {
private String name; //节点的内容
private Node next; //指向节点的直接后继
public Node(){
}
public Node(String name){
this(name, null);
}
public Node(String name, Node next) {
this.name = name;
this.next = next;
}
}
/**
* 初始化链表,创建头结点
*/
public MyLinkList(){
head = new Node(); //头结点为空节点
head.next = null;
}
/**
* 给链表中增加节点
* @param data
*/
public void addNode(String data){
/* 1、获取表头
* 2、通过表头找到最后一个元素
* 3、将新增的节点放到最后一个节点的后面
* */
Node p = head;
while(p.next != null){
p = p.next; //移动指针,永远指向链表尾部
}
p.next = new Node(data);
size++ ;
}
/*删除节点*/
public void delNode(String data){
/* 1、获取表头
* 2、通过表头找到最后一个元素
* 3、将新增的节点放到最后一个节点的后面
* */
if(head.next == null){
return;
}
Node p = head;
while(p.next != null){
if(p.next.name.equals(data)){
p.next = p.next.next;
size--;
break;
}else{
p = p.next;
}
}
}
/*查找数据是否在链表中*/
public boolean contains(String data){
Node p = head;
while(p.next != null){
if(p.next.name.equals(data)){
return true;
}else{
p = p.next;
}
}
return false;
}
/*在指值的后面插入值*/
public void insertNode(String param, String data){
Node p = head;
while(p.next != null){
if(p.next.name.equals(param)){
Node temp = p.next.next;
Node newNode = new Node(data, temp);
p.next.next = newNode;
return;
}else{
p = p.next;
}
}
}
/*链表遍历*/
public void iterator(){
Node p = head;
if(p.next == null){
System.out.println("空链表");
}
p = p.next;
while(p.next != null){
System.out.print(p.name + "==>>");
p = p.next;
}
System.out.print(p.name);
}
/*链表长度*/
public int size(){
return size;
}
public static void main(String[] args) {
MyLinkList myLinkList = new MyLinkList();
myLinkList.addNode("组长");
myLinkList.addNode("部门经理");
myLinkList.addNode("主管副总");
myLinkList.addNode("总经理");
myLinkList.iterator();
System.out.println();
myLinkList.delNode("部门经理");
myLinkList.iterator();
System.out.println();
myLinkList.insertNode("主管副总", "经理");
myLinkList.iterator();
}
}