gpt4 book ai didi

java - 通用双向链表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:03 25 4
gpt4 key购买 nike

对于我的个人实践,我正在尝试制作一个基本的、通用的双向链表,我想知道我制作的方法 addtoHead() 和 addtoTail() 是否正确且有效,如果不是,那更好?以及如何从 removeDataAt()、removingFromTail()、removingFromHead() 方法的列表中删除?

节点类:

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 (){
//....
}
}

最佳答案

我觉得 addToTail 不错。

使用 removingDataAt()removingFromTail()removingFromHead(),您想执行您使用 addToTail 和 addToHead 完成的操作.因为这看起来像是作业中的东西,所以我不会给出完整的代码,而只是告诉你如何去做。
我看到您只有 head 和 tail 的导航实例,我建议您还实现一个“当前”,它允许您在列表中导航以执行诸如 removingDataAt(location) 之类的操作.我不确定删除内容的最有效方法,但是对于 Java,它会自动进行垃圾收集,因此您可以使用 head = head.getNextNode() 简单地从头部删除。从尾部移除是一个类似的故事。
对于 removingDataAt(),您将需要一种方法来首先找到数据数据,除非用户已经知道列表的每个位置中有什么。也许像 find(object) 这样的东西会在失败时返回错误消息,否则将“当前”实例移动到找到的对象。您可以使用类似这样的东西来实现它:
for(current = head; current!=null; current = current.getNextNode())

记得检查链表中是否还有其他项。

关于java - 通用双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com