当前位置: 首页 > 知识库问答 >
问题:

像节点这样的对象是否可以在不给它更新值的情况下更新自身?

阙弘博
2023-03-14

(在insert方法中):在else语句中,我不明白“front.next”是如何被更新为“prev.next=newNode”的。理论上,我理解它,但实际上,尽管“prev”的值来自“curr”,它的值来自“front”本身,但front不可能因为“prev”而更新。他们是怎么交谈的?

(Insert方法)我尝试过调试,当它到达执行的else语句时=

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填充节点链。接下来,使用“prev”作为临时节点,在两个节点之间添加一个节点。

我也没想到print方法会起作用,因为它从front节点开始。从理论上讲,从front节点开始是有意义的,但看看我的代码“front”如何不等于任何值,而是“curr”等于“front”,让我觉得“front”不应该访问其余的节点链。

我以为“front.next”是空的,但事实并非如此。

共有1个答案

充运浩
2023-03-14

嗯,根据你的代码,前面的作为链表的第一个节点,它实际上等于某个值(一个真正的节点),因为你的代码把它设置成了一个

if (front == null)
{
    // empty list
    front = tail = newNode;
}

if (curr == front)
{
    // update front
    front = newNode;
}

看!您确实将它指向了具有给定值的某个节点。

更新问题。我想你可能总是在前面的节点旁边插入一个新节点。在这种情况下,prev指向与frontdo相同的节点。因此,如果你更新prev,你也在更新front

 类似资料:
  • 问题内容: 我正在使用嵌套对象(与该帖子相关的用户)为一组文档建立索引(将它们想象为论坛帖子)。我的问题是用户字段可能已更新,但是由于帖子未更改,因此它们未重新索引,并且用户嵌套的对象已过时。有没有一种方法可以更新嵌套对象,而无需再次为整个文档重新编制索引?还是唯一的解决方案是在用户每次更改时重新索引该用户的所有相关帖子? 问题答案: 您可以使用Update API。 需要注意的是更新脚本支持条件

  • 我有两个没有匹配值的表表表1 表2 我想更新下面的表2,这意味着对于103,我想要表1中的101个值 我曾经 除此之外,还有其他查询要使用吗?

  • 问题内容: 我在JSF页面中有这3个字段 我也有一个具有以下属性的后备豆: 我希望在将某些值插入字段val1和val2中而不刷新页面时,outputText元素自动更改其值。结果变量应以这种方式计算(它正在计算百分比):(val1 * val2)/ 100 您能帮我解决我的一些疑问吗?: 我知道为此,我需要javascript或AJAX之类的东西。您认为最好的方法是什么? 我很想知道我如何使用AJ

  • 问题内容: 我最近开始学习Scala,但对它们的泛型也通过类型擦除实现感到失望(但并不感到惊讶)。 我的问题是,Scala是否可以使用通用化泛型,或者需要以某种方式更改JVM?如果确实需要更改JVM,则到底需要更改什么? 问题答案: 否-如果该Scala字节码不支持统一的泛型,则Scala不可能作为Java等效字节码运行。 当您问 “需要更改什么?”时 ,答案是: 字节码规范 。当前,字节码不允许

  • 我有这个密码 但是,如果要更新节点的值,该怎么办?我试着在箱子里做value=newValue,但似乎不被允许。 我的树/节点的结构: