package com.list; /** * 数据结构与算法Java表示 * @version 1.0 * @author 小明 * */ public class MyLinkedList { private Node head;// 头结点 private int size;// 长度 public MyLinkedList() { head = null;// 初始化头节点为空 size = 0;// 初始化长度为0 } // 重写toString方法 @Override public String toString() { String str = ""; Node temp = head; for (; temp != null;) { str += temp.getElement() + " "; temp = temp.getNext();// 后移之末尾 } str = "[ " + str + "]"; return str; } /* * add方法默认将结点加入到单链表的末尾 */ public void add(Node node) { if (head == null) {// 表明此时表为空,不存在头结点 head = node;// 创造头结点 size++;// 长度加一 } else {// 头结点存在 Node temp = head;// 将head赋值给临时变量 while (temp.getNext() != null) { temp = temp.getNext();// 后移之末尾 } temp.setNext(node);// 加入节点 size++;// 长度加一 } } /* * 插入函数 */ public void add(int index, Node node) throws IndexException { Node temp = head;// 将head赋值给临时变量 if (size == 0) {// 当表为空时调用add加入至表头 add(node); return; } if (index <= 0 || index > size + 1) {// 索引位置不正确 throw new IndexException("索引位置不正确!"); } else { if (index == 1) {// 插入位置为第一个是处理 node.setNext(head);// 将原来的头节点设置为插入节点的后继 head = node;// 头节点更改 size++;// 长度增加 } else { if (index == size + 1) {// 此时默认插入表尾 add(node); } else {// 插入既不是表头也不是表尾时 for (int i = 1; i < index - 1; i++) { head = head.getNext();// 后移至插入位置前一位 } node.setNext(temp.getNext());// 将temp的后继赋值给插入节点 temp.setNext(node);// 将temp的后继改为插入节点 size++;// 长度增加 } } } } /* * 删除函数 */ public void remove(int index) throws IndexException { Node temp = head;// head赋值给temp if (index <= 0 || index > size) {// 索引位置不正确 throw new IndexException("索引异常"); } else {// 索引正确 if (index == 1) {// 删除第一个元素 head = head.getNext(); size--;//长度减一 } else { if (index == size) {// 索引正确删除最后一个元素 for (; temp.getNext().getNext() != null;) {// 移至倒数第二个元素 temp = temp.getNext(); } temp.setNext(null);// 删除最后一个元素 size--;//长度减一 }else {//删除元素不在表头或表尾 for(int i=1;i<index-1;i++) {//后移至删除节点的前一个节点 temp=temp.getNext(); } temp.setNext(temp.getNext().getNext());//删除 size--;//长度减一 } } } } public static void main(String[] args) throws IndexException { MyLinkedList list = new MyLinkedList(); list.add(1, new Node<>("asdas")); list.add(1, new Node<>("202")); list.add(new Node<>(85)); System.out.println(list); list.remove(3); System.out.println(list); list.add(2,new Node<>(2154)); System.out.println(list); } } /* * 结点 */ class Node<T> { private T element;// 值域 private Node next;// 指针域 // 节点初始化只可以设置值域 public Node(T element) { this.element = element; next = null; } // 获取值域 public T getElement() { return element; } // 获取指针域 public Node getNext() { return next; } public void setNext(Node node) { next = node; } } /* * 索引异常类 */ class IndexException extends Exception { public IndexException() { } public IndexException(String s) { super(s); } }