Для моей личной практики я пытаюсь создать базовый общий родословный список, и я хочу знать, являются ли методы addtoHead() и addtoTail(), которые я сделал, правильные и эффективные, и если не то, что было бы лучше? и как я могу удалить из списка методы removeDataAt(), removeFromTail(), removeFromHead()?Общий двойной сопоставленный список
класс Node:
public class PracticeNode<T> {
private T data;
private PracticeNode<T> next;
private PracticeNode<T> prev;
PracticeNode() {
next = null;
prev = null;
data = null;
}
PratciceNode(T data) {
this(data, null, null);
}
PracticeNode(T data, PracticeNode<T> next, PracticeNode<T> prev) {
this.data = data;
this.next = next;
this.prev = prev;
}
public void setNextNode(PracticeNode<T> next) {
this.next = next;
}
public void setPrevNode(PracticeNode<T> prev) {
this.prev = prev;
}
public void setData(T data) {
this.data = data;
}
public PracticeNode<T> getNextNode() {
return next;
}
public PracticeNode<T> getPrevNode() {
return prev;
}
public T getData() {
return data;
}
}
Связанный список классов:
public class PracticeLinkedList<T> {
private PracticeNode<T> head;
private PracticeNode<T> tail;
public void addtoHead(T data) {
PracticeNode<T> newnode=new PracticeNode<T>();
if(head==null){
head=newnode;
tail=newnode;
newnode.setNextNode(null);
newnode.setPrevNode(null);
}else{
newnode.setNextNode(head);
head.setPrevNode(newnode);
head=newnode;
}
}
public void addToTail(T data) {
PracticeNode<T> newnode=new PracticeNode<T>();
if(tail==null){
head=newnode;
tail=newnode;
newnode.setNextNode(null);
newnode.setPrevNode(null);
}else{
newnode.setPrevNode(tail);
tail.setNextNode(newnode);
tail=newnode;
}
}
public T removingDataAt (int){
//....
}
public T removingFromTail(){
//....
}
public T removingFromHead(){
//....
}
}
вам не нужен хвостовой узел. – BevynQ
'addToTail()' и 'addToHead()' выглядят правильно. Вы можете сделать их более эффективными, отметив, что вы инициализируете 'head' и' prev' в конструкторе, поэтому нет необходимости устанавливать их в «null» в этих методах. – dave