封装一个超级链表,在测试类中new一个对象对链表进行增删改查
节点类
public class Node {
private Integer data;
private Node next;
public Node() {
}
public Node(Integer data, Node next) {
this.data = data;
this.next = next;
}
public Integer getData() {
return data;
}
public void setData(Integer data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
链表类
public class SuperLink {
//链表的头部
private Node head;
private int currenIndex = -1;
//在index位置添加一个data
public void add(int index, int data){
if(index == 0){
addToHeader(data);
} else {
Node node = head;
for (int i = 0; i < index - 1; i++) {
node = node.getNext();
}
Node newNode = new Node(data, node.getNext());
node.setNext(newNode);
}
currenIndex++;
}
//头插
public void addToHeader(int data){
if(head == null){
head = new Node(data,null);
} else {
//创建一个指向头部的node
Node node = new Node(data, head);
//新的node 变成头
head = node;
}
currenIndex++;
}
//尾插
public void addToTail(int data){
this.add(currenIndex + 1, data);
}
//删除index位置的数据
public void delete(int index){
if(index == 0){
head = head.getNext();
} else {
Node node = head;
for (int i = 0; i < index - 1; i++) {
node = node.getNext();
}
//删除核心
node.setNext(node.getNext().getNext());
}
currenIndex--;
}
//修改index位置的数据
public void setData(int index,int data){
Node node = head;
for (int i = 0; i < index; i++) {
node = node.getNext();
}
//修改核心
node.setData(data);
}
//查找index位置数据
public Integer select(int index){
Node node = head;
for (int i = 0; i < index; i++) {
node = node.getNext();
}
return node.getData();
}
//查找index位置对应节点
public Node selectNode(int index){
Node node = head;
for (int i = 0; i < index; i++) {
node = node.getNext();
}
return node;
}
//获取长度
public int size(){
return currenIndex + 1;
}
//把数组变成字符串
public String arrayToString(){
String str = "[";
for (int i = 0; i < currenIndex + 1; i++) {
str += select(i) + ",";
}
return str.substring(0,str.length() - 1) + "]";
}
//冒泡排序
public void sort(){
for (int i = 0; i < currenIndex ; i++) {
for(int j =0; j< currenIndex - i; j++){
if(select(j) > select(j + 1)){
int temp = select(j);
selectNode(j).setData(selectNode(j + 1).getData());
selectNode(j + 1).setData(temp);
}
}
}
}
//冒泡排序优化
public void sort1(){
for (int i = 0; i < currenIndex ; i++) {
for(int j =0; j< currenIndex - i; j++){
Node node = selectNode(j);
Node next = node.getNext();
if(node.getData() > next.getData()){
int temp = node.getData();
node.setData(next.getData());
next.setData(temp);
}
}
}
}
//冒泡排序优化2
public void sort2(){
for (int i = 0; i < currenIndex ; i++) {
Node node = null;
for(int j =0; j< currenIndex - i; j++){
if(j == 0){
node = head;
} else {
node = node.getNext();
}
Node next = node.getNext();
if(node.getData() > next.getData()){
int temp = node.getData();
node.setData(next.getData());
next.setData(temp);
}
}
}
}
}