标签:private 插入 构造方法 原理 color 函数 font java update
1.结点类
package blog;
/**
* @Description: 结点类
* @author: liuqiang
* @Date: 2018/12/28 23:33
*/
public class Node {
public String data; // 结点的数据域
public Node next; // 结点的指针域
public Node() {
}
// 构造方法时给data赋值
public Node(String data) {
this.data = data;
}
}
2.单链表类
package bolg;
/**
* @Description: 单链表类
* @author: liuqiang
* @Date: 2018/12/28 23:38
*/
public class LinkList {
private Node head; // 头结点
// 调用LinkList构造方法时初始化head
public LinkList() {
head = new Node();
}
/**
* @Description: 尾插法插入结点
* @param: [node]
* @return: void
* @author: liuqiang
* @updateTime: 2018/12/28 23:53
*/
public void addNode(Node node) {
Node temp = head; // 把头结点看做一个指向结点的指针
while (temp.next != null) { // 遍历单链表,直到遍历最后的元素则跳出
temp = temp.next; // 指针指向下一个结点
}
temp.next = node; // 将node指向最后一个结点
}
/**
* @Description: 计算链表的长度
* @param: []
* @return: int
* @author: liuqiang
* @updateTime: 2018/12/28 23:58
*/
public int length() {
int length = 0;
Node temp = head;
while (temp.next != null) {
length++;
temp = temp.next;
}
return length;
}
/**
* @Description: 在指定位置插入结点
* @param: [index, node]
* @return: void
* @author: liuqiang
* @updateTime: 2018/12/30 14:29
*/
public void insert(int index, Node node) {
if (index < 1 || index > length() + 1) {
System.out.println("插入位置不合法");
return;
}
int length = 1; // 记录遍历到的位置
Node temp = head; // 可移动的指针
while (head.next != null) { // 遍历单链表
if (index == length) {
node.next = temp.next;
temp.next = node;
return;
}
temp = temp.next;
}
}
/**
* @Description: 根据位序数删除结点
* @param: [index]
* @return: void
* @author: liuqiang
* @updateTime: 2018/12/30 14:44
*/
public void delete(int index) {
// 判断index是否合理
if (index < 0 || index > length()) {
System.out.println("删除位置不合理");
return;
}
int length = 1;
Node temp = head;
while (temp.next != null) {
if (index == length) {
temp.next = temp.next.next;
return;
}
temp = temp.next;
length++;
}
}
/**
* @Description: 打印单链表的数据
* @param: []
* @return: void
* @author: liuqiang
* @updateTime: 2018/12/30 19:52
*/
public void print() {
Node temp = head.next;
for (int i = 1; i <= length(); i++) {
System.out.println("第" + i + "个结点的数据为" + temp.data);
temp = temp.next;
}
}
/**
* @Description: 获取中间结点的数据
* @param: [linkList]
* @return: void
* @author: liuqiang
* @updateTime: 2018/12/30 19:14
*/
public void getMidNode(LinkList linkList) {
Node search = linkList.head; // 定义一个快结点
Node mid = linkList.head; // 定义一个慢结点
while (search.next != null) { // 遍历单链表
if (search.next.next != null) {
// 如果快结点的下下个结点不为空,则说明离最后一个结点至少还有两个结点,往后走两个结点
search = search.next.next;
} else {
// 如果快结点的下下个结点为空,但下个结点不为空,
// 则说明单链表的结点数为奇数,往后走一个结点即到达最后一个结点
search = search.next;
}
mid = mid.next;
}
System.out.println(mid.data);
}
}
3.测试代码
package bolg;
/**
* @Description: 测试类
* @author: liuqiang
* @Date: 2018/12/30 14:48
*/
public class Test {
public static void main(String[] args) {
LinkList linkList = new LinkList();
// 往单链表中插入多个结点
for (int i = 1; i < 12; i++) {
Node node = new Node("结点" + i);
linkList.addNode(node);
}
linkList.getMidNode(linkList); // 调用获得中间结点数据的函数
}
}
4.输出结果:结点6
标签:private 插入 构造方法 原理 color 函数 font java update
原文地址:https://www.cnblogs.com/iliuqiang/p/10200516.html