如何解决什么是基于单链表的数据结构,以使Enqueue和Dequeue都采用O1?
结构如何实现基于简单链接列表的抽象数据类型文件,以使ENQUEUE和DEQUEUE过程位于O(1)中? 约束:实现队列的结构只能由单个字段指向(例如:头,尾或元素数等)
我的理解是从头到尾分发单链列表。
但是即使在这种情况下,仍然需要两个指针:满足O(1)的头和尾。
但是,这个问题要求队列只能由一个字段指向。
有任何想法或提示吗?
解决方法
我认为这对于循环链接列表是可行的,其中您指向 tail ,因此您可以以tail.next
的形式访问O(1)中的头部。
class Node<T> {
T value;
Node<T> next;
Node(T value,Node<T> next) { this.value = value; this.next = next; }
}
class Queue<T> {
Node<T> tail = null;
void enqueue(T t) {
if (tail == null) {
tail = new Node<T>(value,null);
tail.next = tail;
} else {
Node<T> newTail = new Node<T>(value,tail.next);
tail.next = newTail;
tail = newTail;
}
}
T dequeue() {
if (tail == null) throw new NoSuchElementException();
Node<T> head = tail.next;
T result = head.value;
if (head == tail) {
tail = null;
} else {
tail.next = head.next;
}
return result;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。