![](/img/trans.png)
[英]Writing my own peek() method for my own LinkedList class in Java
[英]Issue creating my own LinkedList class in Java
好的,所以我试图在Java中创建自己的LinkedList类(具有通用类型),但遇到了问题。 我创建了一个LinkedListNode类,该类基本上设置并获取下一个和右指针以及节点的密钥。 我的LinkedList类代码发布在下面,如果编译并运行,您会发现它没有按预期设置列表。 目前,我正在尝试在节点x之后插入节点y,但是我的打印输出如下:
键:5-上一个键:6-下一个键:6键:6-上一个键:空-下一个键:空
我的代码:
public class LinkedList<T> {
private LinkedListNode<T> m_head = null;
private LinkedListNode<T> m_tail = null;
public LinkedList() {
m_head = new LinkedListNode<T>();
m_tail = new LinkedListNode<T>();
m_head.setNext(m_tail);
m_tail.setPrev(m_head);
}
public LinkedListNode<T> getHead() {
return m_head;
}
public LinkedListNode<T> getTail() {
return m_tail;
}
public void insert(LinkedListNode<T> node, LinkedListNode<T> prev_node) {
prev_node.getNext().setPrev(node);
node.setPrev(prev_node);
node.setNext(prev_node.getNext());
prev_node.setNext(node);
}
public void delete(LinkedListNode<T> node) {
}
@Override
public String toString() {
LinkedListNode<T> pointer = m_head.getNext();
String result = "";
while(pointer.getKey() != null) {
T prev_key = pointer.getPrev() == null ? null : pointer.getPrev().getKey();
T next_key = pointer.getNext() == null ? null : pointer.getNext().getKey();
result += "\nKey: " + pointer.getKey() + " - prev key: " + prev_key + " - next key: " + next_key;
pointer = pointer.getNext();
}
return result;
}
public static void main(String[] args) {
LinkedListNode<Integer> x = new LinkedListNode<Integer>(5);
LinkedListNode<Integer> y = new LinkedListNode<Integer>(6);
LinkedList<Integer> list = new LinkedList<Integer>();
list.insert(x, list.getHead());
list.insert(y, x);
System.out.println(list.toString());
}
}
LinkedListNode.java:
public class LinkedListNode<T> {
private T m_key;
private LinkedListNode<T> m_next = null;
private LinkedListNode<T> m_prev = null;
public LinkedListNode() {
}
public LinkedListNode(T key) {
m_key = key;
}
public T getKey() {
return m_key;
}
public void setKey(T key) {
m_key = key;
}
public LinkedListNode<T> getNext() {
return m_next;
}
public LinkedListNode<T> getPrev() {
return m_next;
}
public void setNext(LinkedListNode<T> node) {
m_next = node;
}
public void setPrev(LinkedListNode<T> node) {
m_prev = node;
}
}
您尝试实现的是双重链接列表(与下一个和上一个相同,为两倍)。
而且您的结构设计有问题,维护头部和尾部可能会容易出问题。
您应该尝试使用引用其他元素的单个元素来实现它。
LinkedListNode<T> header = new LinkedListNode<T>();
header.getNext(); // head
header.getPrevious()//tail
插入示例
public void insert(T element) { //We add to the begin
LinkedListNode<T> newElement = LinkedListNode<T>(element);
newElement.setNext(header); //previous begin we set to be next
newElement.setPrevious(header.getPrevious()); //previous end we set to be end.
newElement.getPrevious().setNext(newElement); //to previous end we set new begin.
newElement.getNext().setPrevious(newElement); //to previous begin we set new end.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.