一、定义数据结构
1、定义一个Node 用于储存数据的基本信息
public class Node <T>{
Node<T> next ;
T val;
public Node(T t){
this.val=t;
}
}
2、列表的基本操作
2.1 ,创建列表
public Node<T> crateListNode(T [] arr){
Node<T> pre = new Node<>(null);
Node<T> tempNode =pre;
for (T t : arr) {
tempNode.next= new Node<>(t);
tempNode =tempNode.next;
}
return pre.next;
}
2.2遍历列表
public void showList(Node<T> node){
while (node != null){
System.out.println(node.val);
node =node.next;
}
}
2.3头插法插入元素
public Node<T> insertNodeHead(T t ,Node<T> node){
Node<T> pre = new Node<>(t);
if (node == null){
return pre;
}
pre.next=node;
return pre;
}
2.4尾插法插入元素
public Node<T> insertNodeLast(T t, Node<T> node){
Node<T> pre = new Node<>(t);
if (node == null){
return pre;
}
Node<T> tempNode = node;
for ( ; tempNode.next!=null ; tempNode=tempNode.next);
tempNode.next=pre;
return node;
}
2.5指定位置插入元素
public Node<T> insertNodeByKey(T t , int key ,Node<T> node){
if (node ==null){
return null;
}
if (key == 0 ){
return insertNodeHead(t ,node);
}
if (key > getListNodeLength(node)){
return null;
}
Node<T> tempNode = node;
for (int i = 0; i <key-1 ;i++ ,tempNode=tempNode.next);
Node<T> afterNode = tempNode.next;
Node<T> insertNode = new Node<>(t);
insertNode.next=afterNode;
tempNode.next=insertNode;
return node;
}
2.6删除指定位置的元素
public Node<T> deleteNode(int key ,Node<T> node){
if (key == 0){
return node.next;
}
if (key > getListNodeLength(node)){
return node;
}
Node<T> tempNode = node;
for (int i = 0; i <key-1 ;i++ ,tempNode=tempNode.next);
Node<T> afterNode = tempNode.next.next;
Node<T> beforeNode =tempNode;
tempNode.next=null;
beforeNode.next=afterNode;
return node;
}
2.6获取列表的长度
public int getListNodeLength(Node<T> node){
int length = 0;
while (node != null){
node =node.next;
length++;
}
return length;
}