1. Node 节点类
/**
* 链接点 ,相当于是车厢
*/
public class Node {
public long data;
public Node next;
public Node(long value){
this.data = value;
}
/**
* 显示方法
*/
public void display(){
System.out.println(data +" ");
}
}
2. 链表类:
public class LinkList {
public Node first;
public LinkList() {
this.first = null;
}
public void addFirstNode(long data) {
Node node = new Node(data);
if (first != null) {
node.next = first;
}
first = node;
}
/**
* 尾部 插入
*/
public void addEndNode(long data) {
Node node = new Node(data);
int pos = 0;
if (first == null) {
first = node;
}
Node current = first;
while (current.next != null) {
current = current.next;
}
current.next = node;
}
/**
* 删除一个头结点,并返回头结点
*/
public Node deleteFirstNode() {
Node temp = first;
first = temp.next;
return temp;
}
/**
* 在任意位置插入结点,在index 的后面插入
*/
public void add(int index, long data) {
Node node = new Node(data);
Node current = first;
Node previous = first;
int pos = 0;
while (pos != index) {
previous = current;
current = current.next;
pos++;
}
node.next = current;
if (index == 0) {
first = node;
} else {
previous.next = node;
}
}
/**
* 删除任意位置的结点
*/
public Node deleteByPos(int index) {
int pos = 0;
Node previous = first;
Node current = first;
while (index != pos) {
previous = current;
current = current.next;
pos++;
}
if (current == first) {
first = current.next;
} else {
previous.next = current.next;
}
return current;
}
/**
* 通过数据删除结点
*/
public Node deleteDyData(int data) {
Node current = first;
Node previous = first;
while (current.data != data) {
if (current.next == null) {
return null;
}
previous = current;
current = current.next;
}
if (current == first) {
first = current.next;
} else {
previous.next = current.next;
}
return current;
}
/**
* 显示出所有结点信息
*/
public void displayNodes() {
Node current = first;
while (current != null) {
current.display();
current = current.next;
}
}
/**
* 通过位置查找结点信息
*/
public Node findByPos(int index) {
Node current = first;
int pos = 0;
if (pos != index) {
current = current.next;
pos++;
}
return current;
}
/**
* 根据数据查找节点信息
*/
public Node findByData(int data) {
Node current = first;
while (current.data != data) {
if (current.next == null)
return null;
current = current.next;
}
return current;
}
}