BitTigerio 2018-04-11
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下
package com.shine.test.datastruct; /** * 简易链表 * * @author SHINE * * @param <E> */ public class LinkList<E> { private Node head, tail; private int size = 0; protected class Node<E> { E data; Node next; } public LinkList() { head = new Node(); head.next = null; tail = new Node<E>(); } public void insert(E e, int index) { Node newNode = new Node<E>(); newNode.data = e; Node before = head; Node temp = head.next; while (index >= 0) { if (index == 0) { before.next = newNode; newNode.next = temp; size++; break; } before = temp; temp = temp.next; index--; } } public void add(E e) { Node node = new Node(); node.data = e; node.next = null; if (head.next == null) { head.next = node; } tail.next = node; tail = node; size++; } public E get(int index) { if (index > size - 1) { return null; } Node temp = head.next; while (index >= 0) { if (index == 0) { return (E) temp.data; } temp = temp.next; index--; } return null; } public E getFirst() { return get(0); } public E getLast() { return get(size - 1); } public void remove(E e) { Node before = head; Node temp = head.next; while (temp != null) { if (temp.data.equals(e)) { before.next = temp.next; size--; break; } before = temp; temp = temp.next; } } @Override public String toString() { StringBuffer sb = new StringBuffer(); Node temp = head.next; while (temp != null) { sb.append(temp.data + "->"); temp = temp.next; } return sb.toString(); } public int getLength() { return size; } }