巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下
package com.shine.test.datastruct;
/**
* 简易链表
*
* @author SHINE
*
* @param
*/
public class LinkList {
private Node head, tail;
private int size = 0;
protected class Node {
E data;
Node next;
}
public LinkList() {
head = new Node();
head.next = null;
tail = new Node();
}
public void insert(E e, int index) {
Node newNode = new Node();
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;
}
}