0

我有一个名为input的字符串,如下所示: i52 i22 i36 i48 i32 d52 d32

每个i数字前面的,代表一个插入d一个删除

每个单独的数字都需要作为节点插入到 LinkedList 中,如果它是插入到LinkedList 的末尾。或者从 LinkedList 中删除,如果它是一个delete。对于删除,它应该删除数量等于 的节点d##

我当前的代码:

LinkedList<ListNode> list = new LinkedList<ListNode>();
ListNode header = new ListNode(null);

    for (String s: input.split(" ")){

        if (s.charAt(0) == 'i') {
            ListNode node = new ListNode(s);
            node.next = new ListNode(s);
            list.add(node);
        }
        else if (s.charAt(0) == 'd'){
            list.remove(s);
        }
    }

我知道我的代码在插入和删除循环中搞砸了。如何创建一个新节点并将其连接到下一个节点?


节点类是:

class ListNode
{
    Object   element;
    ListNode next;

    ListNode(Object theElement ) {
        this(theElement, null );
    }

    ListNode(Object theElement, ListNode n ) {
        element = theElement;
        next    = n;
    }
}
4

2 回答 2

1

如果您使用的是 Java 的 LinkedList,您所要做的就是:

if (s.charAt(0) == 'i') {
    ListNode node = new ListNode(s);
    list.add(node);
}

LinkedList 将负责连接节点并“链接”所有内容。

如果您正在制作自己的 LinkedList,则必须在其中定义 add 方法。例如:

class LinkedList{
    ListNode head, tail;

    public void add(Object o){
        //Your add implementation
    }

    // ... other methods    
}
于 2013-11-01T18:29:36.533 回答
1

你的方法似乎是多余的。集合框架LinkedList<T>将提供链接ListNode您放入其中的所有元素。next除非您尝试做更多事情,否则无需使用带字段的节点。

然后,您的代码不会插入xya 的数字,ixy而是插入整个字符串。这可以帮助:

LinkedList<String> list = new LinkedList<String>();

 for (String s: input.split(" ")){
     if(s.startsWith("i")){
         list.add(s.substring(1));
     }
     else if (s.charAt(0) == 'd'){
         list.remove(s.substring(1));
     }
 }
于 2013-11-01T19:44:14.767 回答