package com.duixiang;
/*
* 1.没有写输入合法验证
* 2.代码逻辑比较简单
*/
public class LinkedList<E> { //泛型
private class Node{ //我用的是内部类,用户不需要知道内部如何实现,所直接用内部类封装
public E e;
public Node next;
public Node(E e,Node next) {
this.e = e;
this.next = next;
}
public Node(E e) {
this(e, null);
}
public Node() {
this(null,null);
}
@Override
public String toString() {
return e.toString();
}
}
private Node head; //设置链表头,初始化为空
int size; // 当前链表实际长度
public LinkedList() {
head = null;
size = 0;
}
public int getSize() { //得到链表当前长度
return size;
}
public void addFirst(E e) { //在链表头添加元素
Node node = new Node(e);
node.next = head;
head = node;
size ++;
}
public void add(int index, E e) { //在链表某一个索引添加元素
Node preNode = new Node();
preNode = head;
Node node = new Node(e);
if (index > 0 && index < size) {
for (int i = 1; i <size; i++) {
if (i == index) {
node.next = preNode.next;
preNode.next = node;
size++;
break;
}else {
preNode = preNode.next;
}
}
}else if (index == 1) {
addFirst(e);
}else {
System.out.println("您的输入有误!");
}
}
public void addLast(E e) {
add(size, e);
}
public void delete(int index) {
Node nowNode = new Node(); //当前节点,用来遍历到要删除的节点
Node delNode = new Node(); //要删除的节点
nowNode = head;
for (int i = 0; i < index - 1; i++) {
nowNode= nowNode.next;
}
delNode = nowNode.next;
nowNode.next = delNode.next;
size--;
}
public boolean isEmpty() {
return size==0;
}
public E find(int index) {
Node nowNode = new Node();
nowNode = head;
for (int i = 0; i <index; i++) {
nowNode = nowNode.next;
}
return nowNode.e;
}
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuffer stringBuffer = new StringBuffer();
Node nowNode = new Node();
nowNode = head;
stringBuffer.append("[");
for (int i = 0; i < size; i++) {
if (nowNode.next != null) {
stringBuffer.append(nowNode.e+",");
nowNode = nowNode.next;
}else {
stringBuffer.append(nowNode.e);
}
}
stringBuffer.append("]");
return stringBuffer.toString();
}
}
java实现链表,以及链表的基本功能,增,删,toString等功能
最新推荐文章于 2022-09-15 11:07:57 发布