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

链表prepend和toString方法

东门涵育
2023-03-14
/* ------------------------------------------------------- *
 * Inner classes                                           *
 * ------------------------------------------------------- */
/**
 * The node used by StringList.
 */
private class StrNode {

    String data;
    StrNode next;
}

/* ------------------------------------------------------- *
 * Instance variables                                      *
 * ------------------------------------------------------- */
private StrNode head;   // the head of the singly-linked list.

/* ------------------------------------------------------- *
 * Instance methods                                        *
 * ------------------------------------------------------- */
/**
 * No-argument constructor.
 */
public StringList() {
    head = null;
}

/**
 * Adds an item to the start of the list.
 *
 * @param s the item to add
 */
public void prepend(String s) {
    var newNode = new StrNode();
    // TODO: Adds an item to the start of the list.     
    if(head == null) {
        head = newNode;
    }
    else {
    newNode.next = head.next;
    head.next = newNode;
    }
    
}

/**
 * Adds an item to the end of the list.
 *
 * @param s the item to add
 */
public void append(String s) {
    // TODO:    Adds an item to the end of the list.
    
}

/**
 * Inserts an item after the first instance of a key if the key exists.
 *
 * @param s the item to insert
 * @param key the item in the list to insert after
 * @return whether the insertion was successful
 */
public boolean insertAfter(String s, String key) {
    // TODO:    Inserts an item after the first instance of a key if the key exists.
    
    return false;
}

/**
 * Deletes the first instance of an item from the list.
 *
 * @param key the value of the item to delete from the list.
 * @return whether the deletion was successful.
 */
public boolean delete(String key) {
    // TODO:    Deletes the first instance of an item from the list.
    
    return false;
}

/**
 * Returns the value of the nth item in the list.
 * 
 * @param n the zero-based index of the item to return
 * @return the value of the nth item
 */
public String get(int n) {
    // TODO:    Returns the value of the nth item in the list.
    // Note: if n is out of bounds, raise an IndexOutOfBoundsException.
    
    
    return null;
}

/**
 * Returns the number of items in the list.
 *
 * @return the number of items in the list
 */
public int length() {
    // TODO:    Returns the number of items in the list.
    int length = 0;
    StrNode current = head;
    
    while(current != null) {
        length++;
        current = current.next;
    }
    
    return length;
}

/**
 * Returns a string of all the items in the list separated by a space.
 *
 * The last item will have a space after it too.
 *
 * @return list of the list's values
 */
@Override
public String toString() {
    // TODO:    Returns a string of all the items in the list separated by a space.
    String result = "{";
    StrNode current = this.head;
    
    while(current != null) {
        result += current.data + " ";
        current = current.next;
    }
 
    return result + "}";

}
    StringList s = new StringList();
    
    s.prepend("one");
    s.prepend("two");
    s.prepend("three");
    System.out.println(s);      
    
}

}

``

共有1个答案

国阳
2023-03-14

错误在prepend(strings)方法中。仔细看看--您从不使用s,也就是说,您传递给此方法的字符串从不存储。您只需添加newnode.data=s;作为第二行。但是,还有第二个错误,因为strNode对象没有正确链接。

解决方案

public void prepend(String s) {
    var newNode = new StrNode();
    newNode.data = s;
    if (head == null) {
        head = newNode;
    } else {
        // First, we set the current head as the successor of the new newNode
        newNode.next = head;
        // Then, we set the new newNode as head (as we prepend)
        head = newNode;
    }
}

则输出如下所示:

{three two one }
@Override
public String toString() {
    StringBuilder result = new StringBuilder("{");
    StrNode current = this.head;

    while (current != null) {
        result.append(current.data).append(" ");
        current = current.next;
    }
    result.setLength(result.length() - 1);

    return result + "}";
}
 类似资料:
  • 问题内容: 好的,我正在尝试学习如何打印出链表。我有需要用于列表的所有方法,但是我不知道如何显示节点的值。现在,我的main方法中什么都没有,因为在尝试在main方法中调用非静态方法时,我不断出错。我有一个toString方法,用于显示列表的内容。我将如何调用此toString以显示每个节点的值?任何建议将不胜感激。 这是节点类: 这是LinkedList类,其中包含操作列表的main和方法: 问

  • 描述 (Description) prepend( content )方法将内容添加到每个匹配元素的内部。 将它与append( content )方法进行比较。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>selector</i>.prepend( content ) 参数 (Parameters) 以下是此方法使用的所有参数的说明 - content - 要在每个目标之后插

  • 问题内容: 我有以下代码: 但是“淡入”功能不起作用…我希望内容被预先放置并淡入“ …我该怎么做? 提前致谢! 问题答案: 假设是HTML,请尝试以下操作: 当您这样做时: 您真正淡入的东西是初始选择器(位于最前面的列表)的结果,该选择器已经可见。

  • 我需要为链表队列实现一个toString()递归方法。我知道我的toString方法在我上周做的一个链表实现中工作得很好,所以我在处理它的队列方面出了问题。 我的QueueList的toString方法: 以及我的构造函数,例如QueueList: 我试图用这个测试看看里面发生了什么: 与输出 我意识到这是因为我说的是前面的在方法的递归部分,但即使我将其更改为,我的输出是 这可能与我的排队和退队方

  • 我非常精通编码,但偶尔我会遇到似乎做基本相同事情的代码。我在这里的主要问题是,为什么你会使用 .() 而不是 ? 我一直在寻找,似乎找不到两者之间区别的明确定义,以及何时使用它们,何时不使用它们。 一个比另一个有什么好处,为什么我要使用一个而不是另一个??有人能给我解释一下吗?

  • 本文向大家介绍Java toString()方法。,包括了Java toString()方法。的使用技巧和注意事项,需要的朋友参考一下 String类的toString()方法将自身返回为字符串。 示例 输出结果