Java 迭代链表

Java 迭代链表,java,Java,我在迭代一个任务的链表时遇到了一点麻烦 链表类/节点类 (无大小方法&无法修改/添加方法) 我的完整java文件: /*** DO NOT ADD A NEW IMPORT DECLARATION HERE ***/ /*** DO NOT MAKE ANY CHANGE TO CLASS A5 EXCEPT THE PLACEHOLDER TO FILL IN ***/ /*** YOU CANNOT ADD A NEW FIELD VARIABLE ***/ /*** Y

我在迭代一个任务的链表时遇到了一点麻烦

链表类/节点类 (无大小方法&无法修改/添加方法)

我的完整java文件:

/***  DO NOT ADD A NEW IMPORT DECLARATION HERE  ***/
 
/***  DO NOT MAKE ANY CHANGE TO CLASS A5 EXCEPT THE PLACEHOLDER TO FILL IN  ***/
/***  YOU CANNOT ADD A NEW FIELD VARIABLE  ***/ 
/***  YOU CANNOT ADD A NEW METHOD DECLARATION  ***/ 
public class A5 {
    public static void main(String[] args) {
        //---------------------------------------------------------------------
        TreeNode root = new TreeNode(1);
        MyGenericLinkedList<TreeNode> children = new MyGenericLinkedList();
 
        TreeNode two = new TreeNode(2);
        TreeNode three = new TreeNode(3);
        TreeNode four = new TreeNode(4);
        TreeNode five = new TreeNode(5);
        TreeNode six = new TreeNode(6);
        TreeNode seven = new TreeNode(7);
        TreeNode eight = new TreeNode(8);
        TreeNode nine = new TreeNode(9);
        TreeNode ten = new TreeNode(10);
        TreeNode eleven = new TreeNode(11);
        TreeNode twelve = new TreeNode(12);
        TreeNode thirteen = new TreeNode(13);
        TreeNode fourteen = new TreeNode(14);
 
        children.add(two);
        children.add(three);
        children.add(four);
        root.setChildren(children);
        children.remove(0);
        children.remove(0);
        children.remove(0);
 
        children.add(five);
        children.add(six);
        two.setChildren(children);
        children.remove(0);
        children.remove(0);
 
        children.add(ten);
        children.add(eleven);
        four.setChildren(children);
        children.remove(0);
        children.remove(0);
 
        children.add(seven);
        children.add(eight);
        children.add(nine);
        six.setChildren(children);
        children.remove(0);
        children.remove(0);
        children.remove(0);
 
        children.add(twelve);
        ten.setChildren(children);
        children.remove(0);
 
        children.add(thirteen);
        children.add(fourteen);
        twelve.setChildren(children);
        children.remove(0);
        children.remove(0);
        //---------------------------------------------------------------------
 
        /***  DO NOT MAKE ANY CHANGE TO THE FOLLOWING CODE  ***/
        MyGenericTree<Integer> tree = new MyGenericTree<Integer>(root);
        tree.traverseInPostOrder();
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS MyGenericTree EXCEPT THE PLACEHOLDER TO FILL IN  ***/
/***  YOU CANNOT ADD A NEW FIELD VARIABLE  ***/ 
/***  YOU CANNOT ADD A NEW METHOD DECLARATION  ***/ 
class MyGenericTree<T> {
    private TreeNode<T> root = null;
 
    public MyGenericTree(TreeNode<T> root) {
        this.root = root;
    }
 
    public void traverseInPostOrder() {
        traverseInPostOrder(root);
    }
 
    public void traverseInPostOrder(TreeNode<T> node) {     
        //---------------------------------------------------------------------
        System.out.println("1");
        while(node.children.front != null) {
            System.out.println(node.children.front);
            node.children.remove(0);
        }
        
        /*  
        if(node.children == null){
                System.out.print(node.data);
            }
            else{
                TreeNode curr = node.children.get(0);
                int i = 1;
                while(curr != null) {
                MyGenericTree<Integer> currNode = new MyGenericTree<Integer>(curr);
                //curr = node.children.get(i);
                currNode.traverseInPostOrder();
                //curr = curr.next;\
                i++;
            }
                System.out.print(node.data);
            }
            */
        //---------------------------------------------------------------------
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS TreeNode  ***/
class TreeNode<N> {
    N data = null;
    TreeNode<N> parent = null;
    MyGenericLinkedList<TreeNode<N>> children = null;
 
    public TreeNode(N data) {
        this.data = data;
    }
 
    public void setChildren(MyGenericLinkedList<TreeNode<N>> children) {
        this.children = children;
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS MyGenericLinkedList  ***/
class MyGenericLinkedList<S> {
    Node<S> front;
 
    public MyGenericLinkedList() {
        front = null;
    }
 
    public void add(S value) {
        if (front == null) {
            front = new Node<S>(value);
        } else {
            Node<S> current = front;
            while (current.next != null) {
                current = current.next;
            }
            current.next = new Node<S>(value);
        }
    }
 
    public S get(int index) {
        Node<S> current = front;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }
        return (S)current.data;
    }
 
    public void remove(int index) {
        if (index == 0) {
            front = front.next;
        } else {
            Node<S> current = front;
            for (int i = 0; i < index - 1; i++) {
                current = current.next;
            }
            current.next = current.next.next;
        }
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS Node  ***/
class Node<X> {
    X data;
    Node<X> next;
 
    public Node(X data) {
        this.data = data;
        this.next = null;
    }
 
    public Node(X data, Node<X> next) {
        this.data = data;
        this.next = next;
    }
}
/***请勿在此添加新的导入声明***/
/***除了要填写的占位符外,不要对A5类进行任何更改***/
/***不能添加新的字段变量***/
/***不能添加新的方法声明***/
公开课A5{
公共静态void main(字符串[]args){
//---------------------------------------------------------------------
TreeNode根=新的TreeNode(1);
MyGenericLinkedList子项=新建MyGenericLinkedList();
TreeNode 2=新的TreeNode(2);
TreeNode三=新的TreeNode(3);
TreeNode 4=新的TreeNode(4);
TreeNode 5=新的TreeNode(5);
TreeNode 6=新的TreeNode(6);
TreeNode 7=新的TreeNode(7);
TreeNode 8=新的TreeNode(8);
TreeNode九=新的TreeNode(9);
TreeNode十=新的TreeNode(10);
TreeNode 11=新的TreeNode(11);
TreeNode 12=新的TreeNode(12);
TreeNode 13=新的TreeNode(13);
TreeNode 14=新的TreeNode(14);
增加(两名);
增加(三名);
增加(四名);
根。setChildren(children);
移除(0);
移除(0);
移除(0);
增加(五名);
增加(六名);
二、儿童;
移除(0);
移除(0);
儿童。加(十);
增加(11名);
四.儿童(儿童);
移除(0);
移除(0);
增加(七名);
增加(八名);
增加(九);
六.儿童(儿童);
移除(0);
移除(0);
移除(0);
儿童。加(十二);
十.儿童(儿童);
移除(0);
增加(十三名);
增加(14名);
12.儿童(儿童);
移除(0);
移除(0);
//---------------------------------------------------------------------
/***请勿对以下代码进行任何更改***/
MyGenericTree=新的MyGenericTree(根);
tree.TraverseInpStorder();
}
}
/***除了要填充的占位符外,不要对MyGenericTree类进行任何更改***/
/***不能添加新的字段变量***/
/***不能添加新的方法声明***/
类MyGenericTree{
私有树节点根=null;
公共MyGenericTree(TreeNode根){
this.root=根;
}
public void transverseInPostorder(){
traverseInPostOrder(根);
}
public void transverseInpStorder(TreeNode节点){
//---------------------------------------------------------------------
系统输出打印项次(“1”);
while(node.children.front!=null){
System.out.println(node.children.front);
节点。子节点。删除(0);
}
/*  
if(node.children==null){
系统输出打印(节点数据);
}
否则{
TreeNode curr=node.children.get(0);
int i=1;
while(curr!=null){
MyGenericTree currNode=新的MyGenericTree(curr);
//curr=node.children.get(i);
currNode.TraverseInputStorder();
//curr=curr.next\
i++;
}
系统输出打印(节点数据);
}
*/
//---------------------------------------------------------------------
}
}
/***请勿对TreeNode类进行任何更改***/
三烯类{
N数据=null;
TreeNode父节点=null;
MyGenericLinkedList子项=null;
公共树节点(N个数据){
这个数据=数据;
}
public void setChildren(MyGenericLinkedList子项){
这个。孩子=孩子;
}
}
/***不要对MyGenericLinkedList类进行任何更改***/
类MyGenericLinkedList{
节点锋;
公共MyGenericLinkedList(){
front=null;
}
公共无效添加(S值){
if(front==null){
前端=新节点(值);
}否则{
节点电流=前端;
while(current.next!=null){
当前=当前。下一步;
}
current.next=新节点(值);
}
}
公共S get(int索引){
节点电流=前端;
对于(int i=0;i
基于迭代器的使用方式,它可能会在打印出链表后破坏链表。通常,在使用链接列表时,您希望保留该列表。下面是遍历链表的基本概念

while(node.children.front != null) {
    System.out.println(node.children.front);
    node.children.front = node.children.front.next
}
在任何时候,您都只能访问单个节点,因此如果要转到下一个节点,则必须将当前节点设置为列表中的下一个节点。因为它可能是空的,所以如果节点设置为空值,则需要进行条件检查。如果将其设置为空值,则处于e
/***  DO NOT ADD A NEW IMPORT DECLARATION HERE  ***/
 
/***  DO NOT MAKE ANY CHANGE TO CLASS A5 EXCEPT THE PLACEHOLDER TO FILL IN  ***/
/***  YOU CANNOT ADD A NEW FIELD VARIABLE  ***/ 
/***  YOU CANNOT ADD A NEW METHOD DECLARATION  ***/ 
public class A5 {
    public static void main(String[] args) {
        //---------------------------------------------------------------------
        TreeNode root = new TreeNode(1);
        MyGenericLinkedList<TreeNode> children = new MyGenericLinkedList();
 
        TreeNode two = new TreeNode(2);
        TreeNode three = new TreeNode(3);
        TreeNode four = new TreeNode(4);
        TreeNode five = new TreeNode(5);
        TreeNode six = new TreeNode(6);
        TreeNode seven = new TreeNode(7);
        TreeNode eight = new TreeNode(8);
        TreeNode nine = new TreeNode(9);
        TreeNode ten = new TreeNode(10);
        TreeNode eleven = new TreeNode(11);
        TreeNode twelve = new TreeNode(12);
        TreeNode thirteen = new TreeNode(13);
        TreeNode fourteen = new TreeNode(14);
 
        children.add(two);
        children.add(three);
        children.add(four);
        root.setChildren(children);
        children.remove(0);
        children.remove(0);
        children.remove(0);
 
        children.add(five);
        children.add(six);
        two.setChildren(children);
        children.remove(0);
        children.remove(0);
 
        children.add(ten);
        children.add(eleven);
        four.setChildren(children);
        children.remove(0);
        children.remove(0);
 
        children.add(seven);
        children.add(eight);
        children.add(nine);
        six.setChildren(children);
        children.remove(0);
        children.remove(0);
        children.remove(0);
 
        children.add(twelve);
        ten.setChildren(children);
        children.remove(0);
 
        children.add(thirteen);
        children.add(fourteen);
        twelve.setChildren(children);
        children.remove(0);
        children.remove(0);
        //---------------------------------------------------------------------
 
        /***  DO NOT MAKE ANY CHANGE TO THE FOLLOWING CODE  ***/
        MyGenericTree<Integer> tree = new MyGenericTree<Integer>(root);
        tree.traverseInPostOrder();
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS MyGenericTree EXCEPT THE PLACEHOLDER TO FILL IN  ***/
/***  YOU CANNOT ADD A NEW FIELD VARIABLE  ***/ 
/***  YOU CANNOT ADD A NEW METHOD DECLARATION  ***/ 
class MyGenericTree<T> {
    private TreeNode<T> root = null;
 
    public MyGenericTree(TreeNode<T> root) {
        this.root = root;
    }
 
    public void traverseInPostOrder() {
        traverseInPostOrder(root);
    }
 
    public void traverseInPostOrder(TreeNode<T> node) {     
        //---------------------------------------------------------------------
        System.out.println("1");
        while(node.children.front != null) {
            System.out.println(node.children.front);
            node.children.remove(0);
        }
        
        /*  
        if(node.children == null){
                System.out.print(node.data);
            }
            else{
                TreeNode curr = node.children.get(0);
                int i = 1;
                while(curr != null) {
                MyGenericTree<Integer> currNode = new MyGenericTree<Integer>(curr);
                //curr = node.children.get(i);
                currNode.traverseInPostOrder();
                //curr = curr.next;\
                i++;
            }
                System.out.print(node.data);
            }
            */
        //---------------------------------------------------------------------
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS TreeNode  ***/
class TreeNode<N> {
    N data = null;
    TreeNode<N> parent = null;
    MyGenericLinkedList<TreeNode<N>> children = null;
 
    public TreeNode(N data) {
        this.data = data;
    }
 
    public void setChildren(MyGenericLinkedList<TreeNode<N>> children) {
        this.children = children;
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS MyGenericLinkedList  ***/
class MyGenericLinkedList<S> {
    Node<S> front;
 
    public MyGenericLinkedList() {
        front = null;
    }
 
    public void add(S value) {
        if (front == null) {
            front = new Node<S>(value);
        } else {
            Node<S> current = front;
            while (current.next != null) {
                current = current.next;
            }
            current.next = new Node<S>(value);
        }
    }
 
    public S get(int index) {
        Node<S> current = front;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }
        return (S)current.data;
    }
 
    public void remove(int index) {
        if (index == 0) {
            front = front.next;
        } else {
            Node<S> current = front;
            for (int i = 0; i < index - 1; i++) {
                current = current.next;
            }
            current.next = current.next.next;
        }
    }
}
 
/***  DO NOT MAKE ANY CHANGE TO CLASS Node  ***/
class Node<X> {
    X data;
    Node<X> next;
 
    public Node(X data) {
        this.data = data;
        this.next = null;
    }
 
    public Node(X data, Node<X> next) {
        this.data = data;
        this.next = next;
    }
}
while(node.children.front != null) {
    System.out.println(node.children.front);
    node.children.front = node.children.front.next
}