我在链表中​​遇到麻烦

时间:2015-07-31 23:39:54

标签: java linked-list

我有考试,我正在研究Linked List,但我不明白为什么不使用添加方法list而使用current代替它。我试过它它给出了逻辑错误。 Currentlist的副本,因此他们都应该给出相同的答案。

public class MagazineList
{
    private MagazineNode list;

    public MagazineList() {
        list = null;
    }


    public void add(Magazine mag) {
        MagazineNode node = new MagazineNode(mag);
        MagazineNode current;

        if(list == null) {
            list = node;
        } else {
            current = list;
            while(current.next != null)
                current = current.next;
            current.next = node;
        }
    }


    public String toString() {
        String result = " ";

        MagazineNode current = list;
        while (current != null) {
            result += current.magazine + "\n";
            current = current.next;
        }
        return result;
    }
    private class MagazineNode
    {
        public Magazine magazine;
        public MagazineNode next;


        public MagazineNode(Magazine mag) {
            magazine = mag;
            next = null;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

list是列表的负责人。你不想改变它,除非你在头上添加一些东西,你需要更新它。

这就是为什么将节点current设置为list(LinkedList的头部)然后只更改当前节点(current = current.next)的原因。

如果您更改了listlist = list.next),则会更改链接列表的头部,并且无法返回。

在add方法中,特别是在遍历节点list之后,实际上会指向列表的尾部,并且您将无法访问任何其他元素(除非它是双重链接的)。