【发布时间】:2019-07-11 15:06:39
【问题描述】:
(在 insert 方法中):在 else 语句中,我不明白“front.next”是如何使用以下行更新的:“prev.next = newNode”。理论上,我理解它,但实际上,虽然“prev”从“curr”中获取它的价值,它从“front”本身获得它的价值,但没有办法因为“prev”而更新front。他们是如何互相交谈的?
(插入方法)我尝试过调试,当它到达执行 => prev.next = newNode 的 else 语句时; front.next 也得到更新,我只是不明白,因为 front 无处被再次初始化。前面是它自己的一个对象。
public class SinglyLinkedList<T>
{
// inner class being created:
protected class Node<T extends Comparable<T>>
{
T val;
Node<T> next;
Node(T val)
{
this.val = val;
this.next = null;
}
Node(T val, Node n)
{
this.val = val;
this.next = n;
}
}
private Node front, tail;
public SinglyLinkedList()
{
this.front = this.tail = null;
}
// print method:
public void print()
{
// print the contents of the list
Node curr = front;
while (curr != null)
{
System.out.println(curr.val + " ");
curr = curr.next;
}
}
// insert method:
public void insert(T val)
{
Node newNode = new Node((Comparable) val);
// make a new node
if (front == null)
{
// empty list
front = tail = newNode;
}
else
{
// list is not empty
Node curr = front, prev = null;
// look for insert point.
while (curr != null && curr.val.compareTo(val) < 0)
{
prev = curr;
curr = curr.next;
}
// insert node before curr
newNode.next = curr;
if (curr == front)
{
// update front
front = newNode;
}
else
{
// update node before
prev.next = newNode;
}
if (tail.next != null)
{
// move tail to last node
tail = tail.next;
}
}
}
}
我希望 curr 继续使用 curr.next 填充节点链,并使用“prev”作为在两个节点之间添加节点的过程中使用的临时节点。
我也没想到 print 方法会起作用,因为它从前端节点开始。从理论上讲,从前端节点开始确实有意义,但是查看我的代码如何“前端”不等于任何值,而是“curr”等于“前端”,让我觉得“前端”不应该有访问其余节点链。
我希望“front.next”为空,但事实并非如此。
【问题讨论】:
标签: java eclipse linked-list nodes singly-linked-list