我有一个rejected
(LinkedList
的自己代码),其中包含LinkedList
。这是完整列表:char
。
我正在尝试编写一个删除所有不是大写字母的字符的方法。运行该方法后,['a','b','I','d','R','A','7','p']
应如下LinkedList
。
但在运行我的代码后,我得到与['I','R','A']
相同的列表,此列表:return
。
以下是该方法的代码:
['a','b','I','d','R','A','7','p']
以下是public static ListNode copyUpperCase(ListNode head) {
ListNode ptr = head;
while(!isEmpty(ptr.next)){
if(!Character.isUpperCase(ptr.element)){
ptr = ptr.next.next;
//System.out.println(ptr.element);
}
ptr = ptr.next;
}
return head;
}
:
isEmpty()
以下是public static boolean isEmpty(ListNode l) {
if ( l == null )
throw new ListsException("Lists: null passed to isEmpty");
return l.next == null;
}
:
ListNode
我可以看到搜索部分正在运行,但我无法正确删除节点部分,是否有任何建议?
答案 0 :(得分:2)
public static ListNode copyUpperCase(ListNode head) {
ListNode ptr = head;
while(!isEmpty(ptr.next)){
if(!Character.isUpperCase(ptr.element)){
ptr.next = ptr.next.next;
//System.out.println(ptr.element);
}
ptr = ptr.next;
}
return head;
}
您需要“更改”列表,因此您错过了对元素的赋值而不是局部变量
然而,这个代码将不起作用,因为这只是分配给下一个元素,而不查看下一个元素是否是一个好的,然后跳到那个
编辑:完整的工作代码
class ListNode {
public ListNode(char element,ListNode next ) {
this.element = element;
this.next = next;
}
public char element;
public ListNode next;
void print() {
System.out.print(this.element+",");
if(this.next != null) {
this.next.print();
}
else {
System.out.println("");
}
}
}
public class main {
//Imo you should only check if this elem is a null one, as a null means empty, a null on next only means that it's the last elem, but will still contain data
public static boolean isEmpty(ListNode l) {
return l == null;
}
public static ListNode getNextUpper(ListNode head) {
while(!isEmpty(head)){
if(Character.isUpperCase(head.element)) {
return head;
}
head = head.next;
}
return null;
}
public static ListNode copyUpperCase(ListNode head) {
ListNode newhead = getNextUpper(head);
ListNode temp = newhead;
while(!isEmpty(temp)){
temp.next = getNextUpper(temp.next);
temp = temp.next;
}
return newhead;
}
public static void main(String[] args) {
ListNode t = new ListNode('a' , new ListNode('b' , new ListNode('I', new ListNode('d', new ListNode('R', new ListNode('A', new ListNode('7', new ListNode('p',null))))))));
t.print();
ListNode newt = copyUpperCase(t);
newt.print();
}
}
答案 1 :(得分:1)
$age_range = $me['age_range']['min'];
是一个局部变量,所以
ptr
不会修改您的链接列表。
您应该修改ptr = ptr.next.next;
。除此之外,如果原始ptr.next
没有引用大写字母,您可能需要修改head
。
这样的事情应该有效:
head