class Node{
int key; // private 是私有的属性
int value;
Node next; //
public Node(int key, int value) {
this.key = key;
this.value = value;
this.next = null;
}
}
public class MyLinkList{
private Node head; // 头节点 默认就是null
public MyLinkList() {
head = null; // 初始化头结点为null,创建空链表
}
public void addNode(int key, int value) {
// 如果是空链表,
if(head == null) {
head = new Node(key, value);
}else {
Node current = head;
// 找到最后一个结点
while(current.next != null) {
current = current.next;
}
System.out.println("尾结点是:" + current.key);
System.out.println("追加结点是:" + key);
current.next = new Node(key, value);
}
}
public Node getNode(int key) {
Node current = head;
// 判断头为空的空
if(head == null) {
return null;
}
if(current.key == key) {
return head;
}else {
current = head.next;
while(current != null) {
if(current.key == key) {
break;
}
// 如果key不匹配,继续找下一个节点
current = current.next;
}
return current;
}
}
public boolean delNode(int key) {
Node current= head;
Node parent; // 记录需要被删除的节点的前一个节点
if(head == null) {
return false;
}else if(head.key == key) { // 如果要删除的节点就是头节点
head = head.next;
return true;
}else { // 节点在中间的情况
parent = current;
current = current.next;
while(current != null) {
if(current.key == key) {
break;
}
// 如果当前节点不是要删除的节点,继续往后找
parent = current;
current = current.next;
}
if(current != null) {
parent.next = current.next;
return true;
}else {
return false;
}
}
}
public boolean insertNode(Node newNode, int index) {
// index就是插入到第几个节点的位置,0->第一个节点 1->第二个节点 2->第三个几点
int i = 0;
Node current = head;
Node parent;
if(index == 0) {
newNode.next = head;
return true;
}else {
parent = current;
current = current.next;
i++;
while(current != null) {
if(index == i) {
break;
}
parent = current;
current = current.next;
i++;
}
if(index == i) {
parent.next = newNode;
newNode.next = current;
return true;
}else {
return false;
}
}
}
public void showLink() {
Node current = head;
while(current!= null) {
System.out.println(current.key + ":" + current.value);
current = current.next;
}
}
public static void main(String[] args) {
MyLinkList myLink = new MyLinkList();
myLink.addNode(11, 1);
myLink.addNode(2, 2);
myLink.addNode(33, 3);
myLink.addNode(4, 4);
Node node = myLink.getNode(11);
if(node != null) {
System.out.println(node.key + ":" + node.value);
}else {
System.out.println("不存在该节点!");
}
// 删除节点
boolean result = myLink.delNode(33);
System.out.println(result);
myLink.showLink();
myLink.insertNode(new Node(100,100), 1);
myLink.showLink();
}
}