//LinkedList.java
public class LinkedList {
@Test //测试结点类
public void test1() {
Node<Character> root = new Node<>('a');
Node<Character> n2 = new Node<>('b');
Node<Character> n3 = new Node<>('c');
root.setNext(n2);
n2.setNext(n3);
n3.setNext(null);
Node<Character> current = root;
while (current != null){
System.out.print(current.getData() + " ");
current = current.getNext();
}
}
@Test //测试链表类
public void test2(){
Link<String> link = new Link<>("");
link.addLast("ClearLove");
link.addLast("Kid");
link.addLast("Uzi");
link.print();
link.add(3, "ZziTai");
link.print();
link.pop(4);
link.print();
System.out.println("第一个结点值是:" + link.get(1));
System.out.println("Kid是第" + link.get("Kid") + "个结点");
}
}
//结点类
class Node<T>{
private T data; //结点值
private Node<T> next; //当前结点的下一个结点
public Node(T data){ //初始化结点时必须赋初值
this.data = data;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) { //设置指向的下一个结点
this.next = next;
}
public T getData() { //获取当前结点值
return data;
}
}
//链表类
class Link<T>{
private Node<T> root; //头结点
private Node<T> rear; //尾指针
public int length; //链表长度
public Link(T t){
root = new Node<>(t);
root.setNext(null);
rear = root;
length = 0;
}
//遍历单链表
void print(){
Node<T> current = root.getNext();
while (current != null){
System.out.print(current.getData() + "->");
current = current.getNext();
}
System.out.println("null");
}
//尾插法
void addLast(T t){
Node<T> n = new Node<>(t);
n.setNext(rear.getNext());
rear.setNext(n);
rear = n;
++length;
}
//任意位置插入
//index:第几个结点
boolean add(int index, T t){
if (index < 1 || index > length + 1) return false;
Node<T> current = root;
for (int i = 1; i < index; i++)
current = current.getNext();
Node<T> n = new Node<>(t);
n.setNext(current.getNext());
current.setNext(n);
++length;
return true;
}
//任意位置删除
//index:第几个结点
boolean pop(int index){
if (index < 1 || index > length) return false;
Node<T> current = root;
for (int i = 1; i < index; i++)
current = current.getNext();
current.setNext(current.getNext().getNext());
--length;
return true;
}
//查找
//index:第几个结点
T get(int index){
if (index < 1 || index > length){
System.out.println("这个位置没有结点");
System.exit(index);
}
Node<T> current = root;
for (int i = 1; i <= index; i++)
current = current.getNext();
return current.getData();
}
//定位第一个结点值为t的结点
int get(T t){
Node<T> current = root.getNext();
for (int i = 1; i <= length; i++) {
if (current.getData().equals(t))
return i;
current = current.getNext();
}
return -1;
}
}
单链表(Java实现)
最新推荐文章于 2025-02-27 10:43:02 发布