定义一个链表
private T data;
private Node<T> next;
public Node(T data){
this.data = data;
}
public void setNext(Node<T> next){
this.next = next;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
public Node<T> getNext() {
return next;
}
1.尾插法
public void addTail(T value){
Node<T> newNode = new Node(value);
if(head == null){
head = newNode;
}else{
Node<T> tmp = head;
while(tmp.next != null){
tmp = tmp.next;
}
tmp.next = newNode;
}
}
2.头插法
public void addHead(T value){
Node<T> newNode = new Node(value);
if(head == null){
head = newNode;
}else{
newNode.next = head.next;
head.next = newNode;
}
}
3.添加一个新节点到指定位置
public boolean addPos(T value, int pos){
Node<T> newNode = new Node(value);
if(pos < 0 || pos >= getLength()){
return false;
}
if(pos == 0){
newNode.next = head;
head = newNode;
return true;
}
Node<T> tmp = head;
for(int i=0; i<=pos -1; i++){
tmp = tmp.next;
}
newNode.next = tmp.next;
tmp.next = newNode;
return true;
}
4.删除某个中间指定节点
public boolean remove(T value){
if(head.data.equals(value)){
head = head.next;
return true;
}
Node<T> tmp = head;
while(tmp.next != null){
if(tmp.next.data.equals(value)){
tmp.next = tmp.next.next;
return true;
}
tmp = tmp.next;
}
return false;
}
5.找到中间某个指定节点
public T findNode(int index){
if(index < 0 || index >= getLength()){
return null;
}
Node<T> tmp = head;
for(int i=0; i<index; i++){
tmp = tmp.next;
}
return tmp.data;
}
6.找出链表长度
public int getLength(){
int length = 0;
Node<T> tmp = head;
while(tmp != null){
length++;
tmp = tmp.next;
}
return length;
}
7.查找单链表中倒数第k个节点
public static <T> MySingleList<T>.Node<T> findKNode(MySingleList