一、节点
public class Node {
public Integer num;
public Node next;
public Node(){}
public Node(Integer num){
this.num = num;
}
public Node(Integer num,Node next){
this.num = num ;
this.next = next ;
}
@Override
public String toString() {
return "--num--"+num + next;
}
}
二、链表及节点操作
import java.util.ArrayList;
import java.util.List;
/**
* @author secondj
* @Date 2021/8/11 9:42
*/
public class LinkLine {
private Node head;
public LinkLine(){
this.head = new Node();
}
public LinkLine(Node head){
this.head = head;
}
//添加节点,尾插法
public LinkLine addNode(Node node){
Node temp = new Node();
if(head.next == null){
head.next = node ;
}
else{
temp = head ;
while(temp.next != null){
temp = temp.next ;
}
temp.next = node ;
}
return this;
}
//添加节点,头插法
public LinkLine addNodeLast(Node node){
if(head.next == null){
head.next = node;
return this;
}
node.next = head.next;
head.next = node;
return this;
}
//删除节点
public LinkLine delNode(Node node){
Node temp = new Node();
if(head.next == null){
return this;
}
else{
temp = head ;
while(temp.next != null){
if(temp.next.num == node.num){
temp.next = temp.next.next ;
}
if(temp.next != null){
temp = temp.next ;
}
}
}
return this;
}
//更新节点数据
public LinkLine updateNode(Integer tarNum,Integer chgNum){
Node temp = new Node();
if(head.next == null){
return this;
}
temp = head ;
while(temp.next != null){
if(temp.next.num == tarNum){
temp.next.num = chgNum;
}
temp = temp.next ;
}
return this ;
}
//链表反转
public LinkLine reverse(){
List<Integer> list = new ArrayList<>();
if(head.next == null){
return this;
}
else{
Node temp = head;
if(head.num != null){
list.add(temp.num);
}
while(temp.next != null){
list.add(temp.next.num);
temp = temp.next;
}
this.clear();
for(int i = list.size()-1;i>=0;i--){
this.addNode(new Node(list.get(i)));
}
return this;
}
}
//链表清空
public LinkLine clear(){
if (head.next == null){
return this;
}else{
head.next = null;
return this;
}
}
@Override
public String toString(){
return head.toString();
}
}
三、测试
public class TestApp {
public static void main(String[] args) {
//---------------------尾插法演示-------------------------------
LinkLine linkLine = new LinkLine();
Node node = new Node(5);
Node node1 = new Node(6);
Node node2 = new Node(7);
linkLine.addNode(node).addNode(node1).addNode(node2).addNode(new Node(8)).addNode(new Node(9));
Node node3 = new Node(5);
linkLine.addNode(node3);
linkLine.updateNode(5,3);
linkLine.delNode(node3);
System.out.println("反转前"+linkLine);
linkLine.reverse();
System.out.println("反转后"+linkLine);
//---------------------头插法演示-------------------------------
System.out.println("==================================================================");
LinkLine linkLines = new LinkLine();
Node nodes = new Node(5);
Node nodes1 = new Node(6);
Node nodes2 = new Node(7);
linkLines.addNodeLast(nodes).addNodeLast(nodes1).addNodeLast(nodes2).addNodeLast(new Node(8)).addNodeLast(new Node(9));
Node nodes3 = new Node(5);
linkLines.addNodeLast(nodes3);
linkLines.updateNode(5,3);
linkLines.delNode(nodes3);
System.out.println("反转前"+linkLines);
linkLines.reverse();
System.out.println("反转后"+linkLines);
}
}