0

我正在尝试创建一种将节点添加到我的链表的方法。该方法需要一个 int(指定新链接应该去哪里)和 String(因为我的链表包含字符串)。我写了一些我认为会在我的列表中的特定点添加一个链接的代码,但是当我在应该添加一个新节点之后打印我的列表时,我看到新节点尚未添加。我很惊讶,因为我在编写代码时非常小心地测试了代码的行为,并且 add 方法似乎符合我的预期——但是新打印的列表并没有反映添加新链接后的更改. 谁能告诉我哪里出错了:/

ps:类名和方法名不讨论,我老师选的,所以必须保留。

谢谢!

测试链表

class LinkedListTest 
{
    public static void main(String[] args) 
    {
            LinkedList list = new LinkedList();

            list.insertFirst("cat");
            list.insertFirst("dog");
            list.insertFirst("fish");
            list.insertFirst("cow");
            list.insertFirst("horse");
            list.insertFirst("pig");
            list.insertFirst("chicken");

            list.add(3, "mouse");

            list.print();
    }   
}

链表类

public class LinkedList 
{
    private Link first;

    public LinkedList() 
    {
        first = null;
    }

    public void insertFirst(String word)
    {
           Link link = new Link(word);
           link.next = first;
           first = link;

           System.out.print(first.item + " ");
    }

    public String deleteFirst()
    {   
        Link temp = first;
        first = first.next;
        return temp.item;
    }

    public String get(int index)
    {
        Link current = first;
        while (index > 0) 
         {
             index--;
             current = current.next;
         }

         return current.item;           
    }

    public void add(int index , String someString)
    {

        Link current = first;

        while (index>0)
        {
            index--;
            current = current.next;
        }

    Link newLink = new Link(someString);
    newLink.next = current;
    current = newLink;

    }

    public void print()
    {
        System.out.println("-----------PRINTING LIST------------");
        Link current = first;
        while(!(current==null))
        {
            System.out.println(current.item);
            current = current.next;
        }
    }
}

链接类

public class Link 
{   
    public String item;
    public Link next;

    public Link(String theItem) 
    {
        item = theItem;
    }
}
4

3 回答 3

3

当插入这样的列表时。您将不得不设置两个“下一个”链接。next 指向您正在插入的项目, next 指向您正在插入的项目,指向您正在滑过的项目。

希望这可以帮助。

于 2012-10-26T19:38:30.263 回答
2

查看将 newLink 添加到当前列表的位置。提示......你不是。您更新current,这是一个指向 newLink 的局部变量,但您从未将 newLink 设置为next当前链接列表中实际存在的任何内容。

于 2012-10-26T19:38:58.280 回答
2
newLink.next = current;
current = newLink;

add您的类方法中的上述代码LinkedList应为:-

newLink.next = current.next;
current.next = newLink
current = newLink;

我希望这可以解决您的问题。您需要设置两个下一个链接以在中间插入一个节点。一个在当前节点指向下一个节点,一个在前一个节点指向当前节点。

于 2012-10-26T19:42:22.560 回答