package 数据结构算法.链表;
/*
*定义节点
* 链表由节点构成
*/
public class node {
private e e; //数据data
private node next; //指向下一个节点
public node() {
}
public node(e e) {
this.e = e;
}
public node getnext() {
return next;
}
public void setnext(node next) {
this.next = next;
}
public e gete() {
return e;
}
public void sete(e e) {
this.e = e;
}
}
package 数据结构算法.链表;
/*
* 定义实现类mylinkedlist
* 实现链表的基本功能:增删改查
*/
public class mylinkedlist {
//声明头节点尾节点
private node head;
private node last;
//链表的大小
private int size;
private int modcount; //计算被修改的次数
public mylinkedlist() {
head = new node();//实例化头结点
last = head;
}
/*
*返回单链表中存储的元素总数
*/
public int size() {
return size;
}
/*
*获取指定索引位置的节点对象
*/
public node get(int index) {
if (index < 0 || index > size - 1)
return null;
node node = head.getnext();//将头结点的下一个节点赋给node
for (int i = 0; i < index; i++) {
node = node.getnext();//获取node的下一个节点
}
return node;
}
/*
*获取指定索引位置的数据
*/
public e getvalue(int index) {
if (index < 0 || index > size - 1)
return null;
node node = get(index);
return node.gete();
}
/*
*增加元素
*/
public void add(e e) {
node node = new node(e); //以e实例化一个节点
last.setnext(node);//往尾节点后追加节点
last = node;//该节点设为最后一个节点
size++;
modcount++;
}
/*
*指定位置插入元素,返回插入的节点数据
*/
public e add(int index, e e) {
if (index < 0 || index > size - 1)
return null;
node node = new node(e); //实例化一个节点
//找到插入的原节点
node oldnode = get(index);
if (index == 0) {//当索引为0时
head.setnext(node);
} else {
//找到插入节点的上一个
node bnode = get(index - 1);
bnode.setnext(node);
}
node.setnext(oldnode);
size++;
modcount++;
return oldnode.gete();
}
/*
*删除指定的节点e,并返回删除节点的数据
*/
public e delete(int index) {
if (index < 0 || index > size - 1)
return null;
if (index == 0) {//当索引为1,令头结点的下一个节点为头结点
node node = head.getnext();
head.setnext(node.getnext());
}
//获取要删除节点的前一个节点
node bnode = get(index - 1);
//获取要删除的节点
node node = bnode.getnext();
//获取要删除节点的下一个节点
node nnode = node.getnext();
//删除该节点
bnode.setnext(nnode);
//清除node的下一个节点
node.setnext(null);
size--;
modcount++;
return node.gete();//返回节点中的数据域
}
/*
*修改指定位置的数据域并返回修改后的数据
*/
public e set(int index, e e) {
if (index < 0 || index > size - 1)
return null;
//获取指定位置的原节点
node node = get(index);
node.sete(e);
modcount++;
return node.gete();
}
}
package 数据结构算法.链表;
/*
*定义测试类
*/
public class mylinkedlisttest {
public static void main(string[] args) {
mylinkedlist list = new mylinkedlist<>();
//测试add
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add(0,"newone");
list.add(1,"newtwo");
for (int i = 0; i < list.size(); i++) {
system.out.print(list.getvalue(i)+" ");
}
//测试set
system.out.println();
list.set(0, "111");
list.set(1, "222");
system.out.println(list.getvalue(0) + " " + list.getvalue(1));
//测试delete
system.out.println();
list.delete(1);
for (int i = 0; i < list.size(); i++) {
system.out.print(list.getvalue(i)+" ");
}
}
}
运行结果如下:
以上就是全部知识点内容,感谢大家对萬仟网的支持。
希望与广大网友互动??
点此进行留言吧!