package com.home;
public class MyLink {
/**
* 链表中的节点,data代表节点的值,next是指向下一个节点的引用
*/
class Node {
Node next = null;// 节点的引用,指向下一个节点
int data;// 节点的对象,即内容
public Node(int data) {
this.data = data;
}
}
Node head = null; //头节点
//链表长度
public int length() {
int length = 0;
Node tmp = head;
while (tmp != null) {
length++;
tmp = tmp.next;
}
return length;
}
//增加,想想增加前后变化
public void addNode(int d) {
Node newNode = new Node(d);
if (head == null) {//没有第一个点就把加入的变成的一个
head = newNode;
return;
}
Node tmp = head;
while (tmp.next != null) {//遍历链表,节点后面有节点的变成上一个,直到尾部
tmp = tmp.next;
}
tmp.next = newNode;//尾部加入
}
//更改,只有更改成功和更改失败
public boolean changeNode(int index,int data) {//index代表改的第几个,data代表改成啥
if (index < 1 || index > length()) {//数值合法
return false;
}
int i = 1;
Node preNode = head;//此节点,就是前一个的next
Node curNode = preNode.next;//后一个节点
while (curNode != null) {//循环到链尾,找到i节点
if (i == index) {
preNode.data = data;//更改
return true;
}
preNode = curNode;//后面节点往前移
curNode = curNode.next;//同时节点尾部也要动
i++;
}
return false;
}
//删除,考虑1. 前一个变化和2. 后一个变化
public boolean deleteNode11(int index) {//删除第几个
if (index < 1 || index > length()) {
return false;
}
if (index == 1) {
head = head.next;
return true;
}
int i = 1;
Node preNode = head;
Node curNode = preNode.next;
while (curNode != null) {
if (i == index) {
preNode.next = curNode.next;
return true;
}
preNode = curNode;
curNode = curNode.next;
i++;
}
return false;
}
//输出链表
public void printList() {
Node tmp = head;
while (tmp != null) {
System.out.println(tmp.data);
tmp = tmp.next;
}
}
public static void main(String[] args) {
MyLink list = new MyLink();
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
list.addNode(5);
list.addNode(6);
System.out.println("linkLength:" + list.length());
System.out.println("head.data:" + list.head.data);
list.printList();
list.changeNode(4,88);
list.deleteNode11(5);
System.out.println("改了删了后");
list.printList();
}
}