package suanfa.link;
public class MyLinkedList {
Node head = null;
public void addNode(Object e) {
Node newNode = new Node(e);
if (null == head) {
head = newNode;
return;
}
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
public boolean deleteNode(int index) {
if (index < 0 || index >= length()) {// 待删除结点不存在
return false;
}
if (index == 0) {
head = head.next;
return true;
}
Node preNode = head;
Node curNode = preNode.next;
int i = 1;
while (curNode != null) {
if (i == index) {
preNode.next = curNode.next;
return true;
}
preNode = preNode.next;
curNode = curNode.next;
i++;
}
return true;
}
public int length() {
int length = 0;
Node curNode = head;
while (curNode != null) {
length++;
curNode = curNode.next;
}
return length;
}
void show() {
Node curNode = head;
while (curNode != null) {
System.out.println(curNode.element);
curNode = curNode.next;
}
}
void reserve() {
Node curNode = head;// 头结点
Node preNode = null;// 前一个结点
while (curNode != null) {
Node nextNode = curNode.next;
curNode.next = preNode;// 指针反转
preNode = curNode;// 前结点后移
curNode = nextNode;// 当前结点后移
}
head = preNode;
}
public boolean isRinged() {
if (head == null) {
return false;
}
Node slow = head;
Node fast = head;
while (fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
if (fast == slow) {
return true;
}
}
return false;
}
public static void main(String[] args) {
MyLinkedList linkedList = new MyLinkedList();
linkedList.addNode("111");
linkedList.addNode("222");
// linkedList.addNode("333");
// linkedList.addNode("333");
linkedList.reserve();
// System.out.println(linkedList.length());
// linkedList.deleteNode(2);
linkedList.show();
}
}