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