package com.lyzz.singlelinkedList;
public class SingleLinkedList {
Node head = null;
private class Node{
private int data;
private Node next = null;
public Node(int data) {
this.data = data;
}
}
public void head_add(int data) {
Node newNode = new Node(data);
if(head == null) {
head = newNode;
return ;
}else {
newNode.next = head;
head = newNode;
}
}
public void tail_add(int data) {
Node newNode = new Node(data);
if(head == null) {
head = newNode;
return ;
}else {
Node temp = head;
while(temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
}
public int get_index(int data) {
Node node = head;
int index = 0;
while(node != null) {
if(node.data == data) {
System.out.println("数据"+data+"下标是"+index);
return index;
}
node = node.next;
index ++;
}
System.out.println("invalid index");
return -1;
}
public int get_length() {
int size = 0;
Node cur_node = head;
while(cur_node != null) {
size ++;
cur_node = cur_node.next;
}
return size;
}
public void print() {
Node node = head;
int size = get_length();
while(size >1) {
System.out.print(node.data+"->");
node = node.next;
size --;
if(size ==1) {
System.out.print(node.data);
}
}
System.out.println();
}
public boolean delete_index(int index) {
if(index < 1 || index > get_length()) {
return false;
}
if(index ==1) {
head = head.next;
return true;
}
Node pre = head;
Node cur = head.next;
int i = 1;
while(cur != null) {
if(i == index) {
pre.next = cur.next;
return true;
}
pre = head.next;
cur = cur.next;
i++;
}
return true;
}
public boolean delete_data(int n) {
Node pre = head;
Node cur = pre.next;
while(cur != null) {
if(cur.data == n) {
pre.next = cur.next;
return true;
}
cur = cur.next;
pre = pre.next;
}
return false;
}
public static void main(String[] args) {
SingleLinkedList list = new SingleLinkedList();
list.head_add(5);
list.head_add(3);
list.tail_add(4);
list.head_add(2);
list.head_add(1);
list.print();
list.ReverseIteratively();
list.SearchMid();
System.out.println(list.hasCycle());
list.print();
}
public Node ReverseIteratively() {
Node pReversedHead = head;
Node cur = head;
Node pre = null;
while (cur != null) {
Node pnext = cur.next;
if (pnext == null) {
pReversedHead = cur;
}
cur.next = pre;
pre = cur;
cur = pnext;
}
this.head = pReversedHead;
return this.head;
}
public Node SearchMid() {
Node p = head;
Node q = head;
while (p != null && p.next != null && p.next.next != null) {
p = p.next.next;
q = q.next;
}
System.out.println("Mid:" + q.data);
return q;
}
public Node findElem(int k) {
if(k<1 || k> get_length()) {
return null;
}
Node p = head;
Node q = head;
for(int i =0; i< k; i++) {
p = p.next;
}
while(p!=null) {
q = q.next;
p = p.next;
}
System.out.println("到数第k个元素是:"+q.data);
return q;
}
public boolean hasCycle() {
Node slow = head;
Node fast = head;
while(fast != null) {
if (fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
if(fast == slow) {
return true;
}
}
return false;
}
public Node merge_sort() {
return head;
}
}