private class Node {
E element;
Node next;
Node prev;
public Node(E element, Node next, Node prev) {
this.element = element;
this.next = next;
this.prev = prev;
}
}
/**
* returns the size of the linked list
* @return
*/
public int size() { return size; }
/**
* return whether the list is empty or not
* @return
*/
public boolean isEmpty() { return size == 0; }
/**
* adds element at the starting of the linked list
* @param element
*/
public void addFirst(E element) {
Node tmp = new Node(element, head, null);
if(head != null ) {head.prev = tmp;}
head = tmp;
if(tail == null) { tail = tmp;}
size++;
System.out.println("adding: "+element);
}
在addFirst(E element)
方法中使用java的doublelylinklist:
public void addFirst(E element) {
Node tmp = new Node(element, head, null);
if(head != null ) {head.prev = tmp;}
head = tmp;
if(tail == null) { tail = tmp;}
size++;
System.out.println("adding: "+element);
}
怎么来head!=null
。因为我们还没有在头部注释中添加任何元素
默认值应为null。当检查第一个if语句时,head==null
是什么?
答案 0 :(得分:0)
您可能希望在非空的LinkedList数据结构的头部插入一个Node。
例如,我可能有一个包含{1, 2}
的列表,我想在该列表中的第0位插入值0
。为此,我会在addFirst()
上调用Node
,其值为0
- 当我执行此操作时,head
不是null
。< / p>
答案 1 :(得分:0)
public void addFirst(E element) {
Node tmp = new Node(element, head, null);
if(head != null ) {//if head is null don't go in this body
head.prev = tmp;//that means there is no node so no prev.
}
// if there is head make new node to be prev of head which is doing in if block
head = tmp;//it becomes the first node in that case
if(tail == null) { tail = tmp;}
size++;
System.out.println("adding: "+element);
}
修改:现在您无法理解以下代码行的工作原理
Node tmp = new Node(element, head, null);
所以这里有两种情况,当你添加第一个节点时,它是链表中的唯一节点,而另一种情况是有链表并且你要添加新的第一个节点。
所以让我们看一下有链表的第二个场景
因此,对于新节点,您需要将其next
指向head
作为上一个链接列表的头部,因为head
已经存在,所以您需要添加一个从head
到其prev
tmp
的链接。
现在,当第一个场景中没有头节点已经存在时,临时节点将指向null(头部),这是出于一般目的的确如此。 所以这里
Node tmp = new Node(element, head, null);
您实际上是为第一个场景传递Node(element, null, null)
。
希望你现在明白为什么他们也会为第一个节点而去。
修改2
public void addFirst(E element) {
Node tmp = new Node(element, head, null);
if(head != null ) {head.prev = tmp;
System.out.println("its head");}
if(head==null){System.out.println("its not head");}
head = tmp;
if(tail == null) { tail = tmp;}
size++;
System.out.println("adding: "+element);
}
如果你试试这个,它将为第一个元素打印“它不是头”。
所以不要混淆没有什么可以混淆的。它工作正常。