下面展示一些 内联代码片
。
package com.javatest;
public class MysingleList {
//设计一个结点类,结点包括数据和下一个结点的地址
class Node {
Object data;
Node next;
public Node(Object data, Node next) {
this.data = data;
this.next = next;
}
}
private Node first; //记录第一个结点
private int total; //记录结点个数
//向链表添加元素方法
public void add(Object obj) {
//判断第一个结点是否有值
if (first == null) {
//如果之前第一个结点没有值,那么就将此时传递进来的存到first这个结点当中
first = new Node(obj, null);
} else {
//如果之前first结点当中已经存储着某个值
//就先找到存储着值的最后一个结点,然后把Node放到最后一个结点的next中
//寻找最后一个结点的方式:从first结点开始,利用next依次找到后面一个结点
//直到某一个结点.next为null,此时这个结点就为最后一个
Node now = first;
while (now.next != null) {
now = now.next;
}
now.next = new Node(obj, null);
}
total++;
}
//获取链表元素个数方法
public int size() {
return total;
}
//删除链表某一元素方法
public void remove(Object obj) {
//考虑到删除元素不在链表中,在此处加上一个异常处理
try {
//传递进来的obj是结点.data
if (obj == null) {
//判断是否是第一个结点
if (first.data == null) {
//如果第一个结点.data是null,说明要删除的就是第一个结点
//此时就将原来链表的第二个结点改为第一个结点,即first结点
first = first.next;
} else {
//如果first结点不是要删除的对象
//那么此时,我们还需要改变被删除结点的上一个结点.next
//这里用left表示被删除结点的上一个结点
Node left = first;
Node now = first.next;
while (now.data != null) {
left = now;
now = now.next;
}
left.next = now.next; //now是要删除的结点
}
} else {
//删除的对象不为null时
//判断是否是第一个结点
if (obj.equals(first.data)) {
//如果第一个结点.data是null,说明要删除的就是第一个结点
//此时就将原来链表的第二个结点改为第一个结点,即first结点
first = first.next;
} else {
//如果first结点不是要删除的对象
//那么此时,我们还需要改变被删除结点的上一个结点.next
//这里用left表示被删除结点的上一个结点
Node left = first;
Node now = first.next;
while (!obj.equals(now.data)) {
left = now;
now = now.next;
}
left.next = now.next; //now是要删除的结点
}
}
total--;
} catch (Exception e) {
System.out.println("你所要删除的元素错误");
}
}
//将链表转换为数组,以便输出
public Object[] toArray(){
Object[] all=new Object[total];
Node node = first;
for (int i = 0; i < all.length; i++) {
all[i]=node.data;
node=node.next;
}
return all;
}
}
下面为测试类:
下面展示一些 内联代码片
。
package com.javatest;
public class TestMysingleList {
public static void main(String[] args) {
//1.创建链表
MysingleList my = new MysingleList();
//2.添加元素
my.add(1111);
my.add("xiaomu");
my.add(123.566);
//3.打印元素个数
System.out.println("元素总数:"+my.size());
//4.遍历元素
Object[] array=my.toArray();
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println();
//5.删除元素
my.remove(1111);
//6.遍历元素
array=my.toArray();
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println();
//7.删除元素
my.remove(1555);
//8.遍历元素
array=my.toArray();
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
结果如下:
元素总数:3
1111
xiaomu
123.566
xiaomu
123.566
你所要删除的元素错误
xiaomu
123.566