【发布时间】:2018-12-10 14:05:44
【问题描述】:
这个问题来自伯克利的数据结构免费在线课程(CS61B)链接可以在这里找到:https://joshhug.gitbooks.io/hug61b/content/chap2/chap23.html
实现链表,使其是循环的,前后指针共享同一个哨兵节点。添加和删除操作不得涉及任何循环或递归。单个此类操作必须花费“恒定时间”,即执行时间不应取决于双端队列的大小。
[分配任务的方框和指针图]
[1]:https://i.stack.imgur.com/pUgk3.png
例如,如果我的列表是 {1,2,3},那么 sentinel.next.next.item 是 3,而 sentinel.next.next.next.item 是 1
public class DLList<T> {
private class Node {
public T item;
public Node next;
public Node prev;
public Node(T item, Node next, Node prev) {
this.item = item;
this.next = next;
this.prev = prev;
}
@Override
public String toString() {
return item.toString();
}
}
public Node sentinel ;
private int size;
public DLList() {
this.sentinel = null;
this.size = 0;
}
public void addLast(T item) {
sentinel.next = new Node(item, null, sentinel);
sentinel = sentinel.next; // updatedSentinel
size++;
}
}
我想问一下,如何确保 updatedSentinel.next 一直链接回第一个节点?另外,我的构造函数对于这个类的目的是否正确?当大小为 0 和大小 >= 1 时,实现是否应该不同?
【问题讨论】:
标签: java data-structures linked-list deque