链表添加节点不工作

时间:2012-10-26 19:27:35

标签: java linked-list

我正在尝试创建一个将节点添加到链接列表的方法。该方法采用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;
    }
}

3 个答案:

答案 0 :(得分:3)

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

希望这有帮助。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

newLink.next = current;
current = newLink;

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

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

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