Java 在linkedlist中查找大写字母并返回包含已找到元素的新linkedlist?

Java 在linkedlist中查找大写字母并返回包含已找到元素的新linkedlist?,java,eclipse,algorithm,list,linked-list,Java,Eclipse,Algorithm,List,Linked List,我必须编写一个方法来搜索LinkedListNode,每个listnode共包含一个字符,查找所有大写字符,将它们复制到新的listnode并返回新的listnode。到目前为止,这是我的代码,但它没有通过教授提供的JUnit测试 这是列表节点: public class ListNode { public char element; public ListNode next; } 这就是我写的方法,它似乎不起作用: public static ListNode copyU

我必须编写一个方法来搜索LinkedListNode,每个listnode共包含一个字符,查找所有大写字符,将它们复制到新的listnode并返回新的listnode。到目前为止,这是我的代码,但它没有通过教授提供的JUnit测试

这是列表节点:

public class ListNode {
    public char element;
    public ListNode next;

}
这就是我写的方法,它似乎不起作用:

 public static ListNode copyUpperCase(ListNode head) {

    ListNode newListNode = mkEmpty();
    if(head == null){
        throw new ListsException("Lists: null passed to copyUpperCase");
    }else{
        char[] sss = toString(head).toCharArray();
        for(int i = 0; i < sss.length ; i++ )
                if(Character.isUpperCase(sss[i])){
                    newListNode.element = sss[i];       
                }
                newListNode = newListNode.next;
        }           
    return newListNode;
}

代码是怎么回事?为什么失败?

您需要在某个地方创建newListNode.next。我在提供的代码片段中没有看到它。 尝试更改您的方法,如:

 public static ListNode copyUpperCase(ListNode head) {

    ListNode newListNode = mkEmpty(); 
    ListNode newHead = newListNode;   //KEEP HEAD OF NEW LINKED LIST
    if(head == null){
        throw new ListsException("Lists: null passed to copyUpperCase");
    }else{
        char[] sss = toString(head).toCharArray();
        for(int i = 0; i < sss.length ; i++ )
            if(Character.isUpperCase(sss[i])){
                newListNode.element = sss[i];
                newListNode.next = mkEmpty();   //CREATE NEW INSTANCES INSIDE LOOP
                newListNode = newListNode.next; //MOVING FORWARD TO NEXT NODE, newListNode is the last node of new linked list
            }
    }
    return newHead;
}

您需要在某处创建newListNode.next。我在提供的代码片段中没有看到它。 尝试更改您的方法,如:

 public static ListNode copyUpperCase(ListNode head) {

    ListNode newListNode = mkEmpty(); 
    ListNode newHead = newListNode;   //KEEP HEAD OF NEW LINKED LIST
    if(head == null){
        throw new ListsException("Lists: null passed to copyUpperCase");
    }else{
        char[] sss = toString(head).toCharArray();
        for(int i = 0; i < sss.length ; i++ )
            if(Character.isUpperCase(sss[i])){
                newListNode.element = sss[i];
                newListNode.next = mkEmpty();   //CREATE NEW INSTANCES INSIDE LOOP
                newListNode = newListNode.next; //MOVING FORWARD TO NEXT NODE, newListNode is the last node of new linked list
            }
    }
    return newHead;
}

扩展@enterbios的答案+1,尝试以下操作:

public static ListNode toUpperCase(ListNode head) {
    if (head == null)
        throw new ListsException("Lists: null passed to copyUpperCase");

    ListNode newHead = null;
    ListNode current = null;

    char[] sss = toString(head).toCharArray();

    for (int i=0; i<sss.length; i++) {
        if (Character.isUpperCase(sss[i])) {
            if (current == null) {
                current = mkEmpty();
                newHead = current;
            } else {
                current.next = mkEmpty();
                current = current.next;
            }
            current.element = sss[i];
        }
    }
    return newHead;

}

扩展@enterbios的答案+1,尝试以下操作:

public static ListNode toUpperCase(ListNode head) {
    if (head == null)
        throw new ListsException("Lists: null passed to copyUpperCase");

    ListNode newHead = null;
    ListNode current = null;

    char[] sss = toString(head).toCharArray();

    for (int i=0; i<sss.length; i++) {
        if (Character.isUpperCase(sss[i])) {
            if (current == null) {
                current = mkEmpty();
                newHead = current;
            } else {
                current.next = mkEmpty();
                current = current.next;
            }
            current.element = sss[i];
        }
    }
    return newHead;

}

作为预防措施,这将导致列表末尾出现一个空节点。我不知道这是否是一个问题,只是想指出XabidrXa7px,这是字符串,它将在ListNode中变成char元素。运行copyUpperCase方法后,它只返回RA。它不应该返回XIRXAX吗?这是为什么?我明白了,我认为@dcharms+1会是个问题,因为我扩展了你的答案,我讨厌别人狙击接近的人的点。作为预防措施,这将导致列表末尾出现一个空节点。我不知道这是否是一个问题,只是想指出XabidrXa7px,这是字符串,它将在ListNode中变成char元素。运行copyUpperCase方法后,它只返回RA。它不应该返回XIRXAX吗?这是为什么?我明白了,我认为@dcharms+1会是个问题,因为我扩展了你的答案,我讨厌人们从亲密的人那里狙击点。