目录
一、节点API设计
(老师上课用的表)
1、节点类实现
二、单向链表API设计
(老师上课用的表)
1、单向链表的初始化创建
2、单向链表代码实现
(以下代码接上图后)
3、单向链表测试
(以下代码不接上图后)
三、图片源代码
1、节点类
package Xiaoxueqi;
class Node<T> {
//存储元素
public T item;
//指向下一个节点
public Node<T> next;
//构造函数
public Node(T item, Node<T> next) {
this.item = item;
this.next = next;
}
}
2、单向链表类及代码实现
package Xiaoxueqi;
public class LinkListResult<T>{
//记录头节点
private Node head;
//记录链表的长度
public int N;
//节点类
private class Node {
//存储数据
T item;
//下一个节点
Node next;
//构造方法
public Node(T item, Node next) {
this.item = item;
this.next = next;
}
}
//构造方法
public LinkListResult(){
this.head=new Node(null,null);
this.N=0;
}
//其他方法
//清空链表
public void clear(){
head.next=null;
N = 0;
}
//获取链表的长度
public int length(){return N;}
//判断链表是否为空
public boolean isEmpty(){return N==0;}
//获取指定位置i处的元素
public T get(int i) {
//通过循环,从头结点往后找,依次找i次,就可以找到对应的元素
Node n = head.next;
for (int index = 0; index < i; index++) {
n = n.next;
}
return n.item;
}
//向链表中添加元素(末尾位置)
public void insert(T t){
//找到当前最后一个结点
Node n = head;
while (n.next != null){
n = n.next;
}
//创建新结点,保存元素t
Node endNode = new Node(t,null);
//让当前最后一个结点指向新结点
n.next = endNode;
//元素个数+1
N++;
}
//向指定位置i处,添加元素t
public void insert(int i,T t){
//找到i位置的前一个结点
Node pre = head;
for (int index = 0;index < i;index++) {
pre = pre.next;
}
//找到i位置的结点
Node curr = pre.next;
//创建新结点,并且新结点需要指向原来i位置的结点
Node newNode = new Node(t, curr);
//原来位置的前一个结点指向新结点即可
pre.next = newNode;
//元素个数+1
N++;
}
//删除指定位置i处的元素,并返回被删除的元素
public T remove(int i) {
//找到位置的前一个节点
Node pre = head;
for (int index = 0; index < i-1; index++){
pre = pre.next;
}
//找到i位置的节点
Node curr = pre.next;
//找到位置的下一个节点
Node next = curr.next;
//前一个节点指向下一个节点
pre.next = next;
//链表中的元素个数-1
N--;
return curr.item;
}
}
3、测试类
package Xiaoxueqi;
public class LinkListTest {
public static void main(String[] args) {
//创建单向链表对象
LinkListResult<String> sl = new LinkListResult<>();
//测试插入
sl.insert("唐僧");
sl.insert("猪八戒");
sl.insert("沙僧");
sl.insert(1,"孙悟空");
//测试获取存储的数据并输出
for (int i = 0; i < sl.length(); i++){
System.out.print(" " + sl.get(i));
}
System.out.println();
System.out.println("单向链表中的元素个数为:"+sl.length());
//测试获取
String getResult=sl.get(1);
System.out.println("获取索引1处的结果为:"+getResult);
//测试删除
String removeResult=sl.remove(0);
System.out.println("删除的元素是:"+removeResult);
//测试清空
sl.clear();
System.out.println("清空后的单向链表中的元素个数为:"+sl.length());
}
}