单链表的实现
1.概述
设计了一个头结点为空的单向链表,可以向指定索引添加元素,删除元素。
2.代码实现
package com.bhy.test;
public class Demo4 {
public static void main(String[] args) {
MySingleLinkedList<Integer> list = new MySingleLinkedList<>();
list.add(1,1);
list.add(2,3);
list.add(3,2);
list.remove(1);
list.list();
System.out.println(list.get(1));
}
}
class MySingleLinkedList<T>{
MyNode<T> head = new MyNode<T>(null,0);
//添加元素
public void add(T value,int index) {
MyNode<T> temp = head;
MyNode<T> newNode = new MyNode<T>(value,index);
boolean flag = false;
//遍历至链表最后
while (true){
if (temp.next==null){
break;
}
if (temp.next.index>newNode.index){
break;
}else if (temp.next.index ==newNode.index){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
System.out.println("编号"+newNode.index+"已存在");
}else {
//赋值
newNode.next = temp.next;
temp.next = newNode;
}
}
public void list() {
//头结点的next为空,代表没有添加元素
if (head.next == null) {
System.out.println("链表为空");
}
//至少添加了一个元素
MyNode<T> temp = head.next;
while (true) {
//当到达链表的最后一个元素时,不打印
if (temp == null) {
break;
}
System.out.println(temp);
//将next向下移动,否则死循环
temp = temp.next;
}
}
public T get(int index){
MyNode<T> temp = head;
while (true){
if (temp.next.index==index){
return temp.next.value;
}else{
System.out.println("没找到");
break;
}
}
return null;
}
public void remove(int index) {
MyNode<T> temp = head;
while (true){
if (temp.next==null) {
System.out.println("所删除索引不存在!");
break;
}
if (temp.next.index==index) {
temp.next =temp.next.next;
break;
}
temp = temp.next;
}
}
}
class MyNode<T>{
public T value;
public int index;
public MyNode<T> next;
public MyNode(T value,int index) {
this.value = value;
this.index = index;
}
@Override
public String toString() {
return "MyNode{" +
"value=" + value +
", index=" + index +
'}';
}
}