Java 链表的trim()方法

Java 链表的trim()方法,java,linked-list,nodes,trim,Java,Linked List,Nodes,Trim,我有一个问题,我在互联网上四处寻找,但找不到一个例子。但是在java中创建String trim()方法(删除前导/尾随空格),我知道其基本代码是: public LString trim(){ int i = this.size; int j = 0; int k = this.offset; char[] arrayOfChar = this.data; while ((j < i) && (arrayOfChar[(k

我有一个问题,我在互联网上四处寻找,但找不到一个例子。但是在java中创建String trim()方法(删除前导/尾随空格),我知道其基本代码是:

    public LString trim(){
    int i = this.size;
    int j = 0;
    int k = this.offset;
    char[] arrayOfChar = this.data;
    while ((j < i) && (arrayOfChar[(k + j)] <= ' '))
      ++j;
    while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' '))
      --i;
    return (((j > 0) || (i < this.size)) ? substring(j, i) : this);
}
(如果您不熟悉node类,它基本上只创建一个单独链接的节点,用作链接列表类中数据之间的链接)


我从来没有见过一个例子或任何东西,所以我想我应该问问社区

假设您只想修剪LinkedList中的每个字符串,为什么不迭代每个项目呢

LinkedList<String> myNodes = new LinkedList<String>();
myNodes.add('This is a node ');
myNodes.add(' another node    '));

for (String s : myNodes){
  s.trim();
}
LinkedList myNodes=新建LinkedList();
添加('这是一个节点');
添加('other node');
用于(字符串s:myNodes){
s、 修剪();
}

假设您只想修剪LinkedList中的每个字符串,为什么不迭代每个项目呢

LinkedList<String> myNodes = new LinkedList<String>();
myNodes.add('This is a node ');
myNodes.add(' another node    '));

for (String s : myNodes){
  s.trim();
}
LinkedList myNodes=新建LinkedList();
添加('这是一个节点');
添加('other node');
用于(字符串s:myNodes){
s、 修剪();
}

假设您只想修剪LinkedList中的每个字符串,为什么不迭代每个项目呢

LinkedList<String> myNodes = new LinkedList<String>();
myNodes.add('This is a node ');
myNodes.add(' another node    '));

for (String s : myNodes){
  s.trim();
}
LinkedList myNodes=新建LinkedList();
添加('这是一个节点');
添加('other node');
用于(字符串s:myNodes){
s、 修剪();
}

假设您只想修剪LinkedList中的每个字符串,为什么不迭代每个项目呢

LinkedList<String> myNodes = new LinkedList<String>();
myNodes.add('This is a node ');
myNodes.add(' another node    '));

for (String s : myNodes){
  s.trim();
}
LinkedList myNodes=新建LinkedList();
添加('这是一个节点');
添加('other node');
用于(字符串s:myNodes){
s、 修剪();
}
假设

  • 通过修剪列表,可以删除空的前导元素和尾随元素
  • 在“使用节点类的链表”下面,您是指
您应该记住,在java中,LinkedList的内部实现是不公开的(注意:java.util.LinkedList.Node具有私有访问修饰符),所有修改都是通过迭代器和LinkedList本身的方法执行的

执行工作将是:

public static void trim (LinkedList list){
    if (list == null || list.size() == 0) return;

    Object element = null;

    ListIterator i = list.listIterator();
    while (i.hasNext() && element == null) {
        element = i.next();
        if (element == null) {
            i.remove();
        }
    }

    element = null;
    i = list.listIterator(list.size());
    while (i.hasPrevious() && element == null) {
        element = i.previous();
        if (element == null) {
            i.remove();
        }
    }
}
但是如果您正在通过链表作为练习重新实现可变字符串 (如果不是作为练习,那么就到此为止并使用or),然后,假设您使用双链接列表实现它,它将如下所示:

编辑:my bad,您可以迭代到第一个非空元素,并直接对其设置引用,更新算法

  • 获取第一个元素
  • 当fetched元素为空时,fetch next
  • 将head引用设置为最后获取的元素,将最后获取的元素的prev引用设置为null
  • 获取最后一个元素
  • 当fetched元素为空时,fetch previous
  • 将尾部引用设置为最后获取的元素,将最后获取的元素的下一个引用设置为null
  • 更新使用您提供的代码,尝试以下方法(因为您使用的是单链接列表,与上面描述的略有不同):

    public void trim(){
    //空出早出
    if(front==null | | back==null)返回;
    节点电流=前端;
    //查找第一个非空元素
    while(current!=null&¤t.data'\u0020'){
    当前=当前。下一步;
    }
    //右修剪
    此参数=当前值;
    如果(当前!=null){
    current.next=null;
    }
    }
    
    假设

    • 通过修剪列表,可以删除空的前导元素和尾随元素
    • 在“使用节点类的链表”下面,您是指
    您应该记住,在java中,LinkedList的内部实现是不公开的(注意:java.util.LinkedList.Node具有私有访问修饰符),所有修改都是通过迭代器和LinkedList本身的方法执行的

    执行工作将是:

    public static void trim (LinkedList list){
        if (list == null || list.size() == 0) return;
    
        Object element = null;
    
        ListIterator i = list.listIterator();
        while (i.hasNext() && element == null) {
            element = i.next();
            if (element == null) {
                i.remove();
            }
        }
    
        element = null;
        i = list.listIterator(list.size());
        while (i.hasPrevious() && element == null) {
            element = i.previous();
            if (element == null) {
                i.remove();
            }
        }
    }
    
    但是如果您正在通过链表作为练习重新实现可变字符串 (如果不是作为练习,那么就到此为止并使用or),然后,假设您使用双链接列表实现它,它将如下所示:

    编辑:my bad,您可以迭代到第一个非空元素,并直接对其设置引用,更新算法

  • 获取第一个元素
  • 当fetched元素为空时,fetch next
  • 将head引用设置为最后获取的元素,将最后获取的元素的prev引用设置为null
  • 获取最后一个元素
  • 当fetched元素为空时,fetch previous
  • 将尾部引用设置为最后获取的元素,将最后获取的元素的下一个引用设置为null
  • 更新使用您提供的代码,尝试以下方法(因为您使用的是单链接列表,与上面描述的略有不同):

    public void trim(){
    //空出早出
    if(front==null | | back==null)返回;
    节点电流=前端;
    //查找第一个非空元素
    while(current!=null&¤t.data'\u0020'){
    当前=当前。下一步;
    }
    //右修剪
    此参数=当前值;
    如果(当前!=null){
    current.next=null;
    }
    }
    
    假设

    • 通过修剪列表,可以删除空的前导元素和尾随元素
    • 在“使用节点类的链表”下面,您是指
    您应该记住,在java中,LinkedList的内部实现是不公开的(注意:java.util.LinkedList.Node具有私有访问修饰符),所有修改都是通过迭代器和LinkedList本身的方法执行的

    执行工作将是:

    public static void trim (LinkedList list){
        if (list == null || list.size() == 0) return;
    
        Object element = null;
    
        ListIterator i = list.listIterator();
        while (i.hasNext() && element == null) {
            element = i.next();
            if (element == null) {
                i.remove();
            }
        }
    
        element = null;
        i = list.listIterator(list.size());
        while (i.hasPrevious() && element == null) {
            element = i.previous();
            if (element == null) {
                i.remove();
            }
        }
    }
    
    但是如果您正在通过链表作为练习重新实现可变字符串 (如果不是作为练习,那么就到此为止并使用or),然后,假设您使用双链接列表实现它,它将如下所示:

    编辑:my bad,您可以迭代到第一个非空元素,并直接对其设置引用,更新算法

  • 获取第一个元素