Является ли двусвязный список нециклическим?
Вроде всё работает, как проверить является ли он циклическим? Также, очень редко, неправильно определяется самое больше значение в списке? (Нужно вставить его в начало списка)
1 <-> 7 <-> 5 <-> 2 <-> 1 <-> 7 <-> 1 <-> 6 <-> 2 <-> 10
Max: 7
7 <-> 1 <-> 7 <-> 5 <-> 2 <-> 1 <-> 7 <-> 1 <-> 6 <-> 2
import java.util.Random;
class Node {
protected int data;
protected Node next, prev;
public Node() {
next = null;
prev = null;
data = 0;
}
public Node(int d, Node n, Node p) {
data = d;
next = n;
prev = p;
}
public void setLinkNext(Node n) {
next = n;
}
public void setLinkPrev(Node p) {
prev = p;
}
public Node getLinkNext() {
return next;
}
public Node getLinkPrev() {
return prev;
}
public void setData(int d) {
data = d;
}
public int getData() {
return data;
}
}
class linkedList {
protected Node start;
public int size;
public linkedList() {
start = null;
size = 0;
}
public boolean isEmpty() {
return start == null;
}
public int getSize() {
return size;
}
public void insertAtStart(int val) {
Node nptr = new Node(val, null, null);
if (start == null) {
start = nptr;
} else {
start.setLinkPrev(nptr);
nptr.setLinkNext(start);
start = nptr;
}
size++;
}
public void maxToStart() {
Node ptr = start;
int max = start.getData();
ptr = start.getLinkNext();
while (ptr.getLinkNext() != null) {
if (max < ptr.getData()) {
max = ptr.getData();
}
ptr = ptr.getLinkNext();
}
System.out.println("\nMax = " + max);
insertAtStart(max);
deleteAtPos(11);
}
public void deleteAtPos(int pos){
Node ptr = start.getLinkNext();
for (int i = 2; i <= size; i++){
if (i == pos){
Node p = ptr.getLinkPrev();
Node n = ptr.getLinkNext();
p.setLinkNext(n);
if(n!=null)
n.setLinkPrev(p);
size-- ;
return;
}
ptr = ptr.getLinkNext();
}
}
public void display() {
System.out.print("List = \n\n");
Node ptr = start;
if (size == 0) {
System.out.print("Empty\n");
return;
}
if (start.getLinkNext() == start) {
System.out.print(start.getData() + " <-> " + ptr.getData() + "\n");
return;
}
System.out.print(start.getData() + " <-> ");
ptr = start.getLinkNext();
while (ptr.getLinkNext() != null) {
System.out.print(ptr.getData() + " <-> ");
ptr = ptr.getLinkNext();
}
System.out.print(ptr.getData() + "\n");
}
}
public class Main {
public static void main(String[] args) {
linkedList list = new linkedList();
Random r = new Random();
for (int i = 0; i < 10; i++) {
int rnd = r.nextInt(11);
list.insertAtStart(rnd);
}
list.display();
list.maxToStart();
list.display();
}
}