提问者:小点点

链表滚动


我正在尝试创建一个方法,将int添加到现有链表的末尾。

问:编写一个方法,将列表的头部(不是哨兵节点)和一个int,n。该方法应该将前n个节点移动到列表的末尾,同时保持它们的顺序相同。例如,如果您有一个列表[1,3,5,7,9]并且n=3,您的方法应该返回列表:[7,9,1,3,5](返回修改后的列表的头部)。

这是我所拥有的,问题在addLast方法上:

public class ListItem{ 
    public int value; 
    public ListItem next; 

    public ListItem(int value, ListItem next){ 
        this.value = value; 
        this.next = next; 
    }

    public void addFirst(int x){
        head = new ListItem(x, head);
        size++
    }

    public void addLast(int x){
        if(head == null){
            addFirst(x);
        }
        else{
            ListItem p;
            for(p = head; p != null; p = p.next){
                p.next = new ListItem(x, null);
                size++;
            }
        }        
}

对于该方法如何遍历列表,我有点困惑。在for循环中,它从头部开始,滚动直到没有p.next。但是里面的方法看起来像是用新的列表项替换每个p.next,而不是滚动直到最后。代码的哪一部分解释了它如何跳过而不在现有列表的每个位置添加新项?


共1个答案

匿名用户

假设您定义了headsize属性;

对于addLast函数else部分应如下所示。

 for(p = head; p.next != null; p = p.next);
 p.next = new ListItem(x, null);
 size++;