从链接列表中删除结束节点



我缺少什么来将节点(boxcar(删除到链表的末尾?

public void removeBoxcarFromEnd() {
    Boxcar prevcar = head;
    Boxcar nextcar = head;
    if (head.next == null) {
        int result = head.data;
        head = null;
        return result;
    }    
    else {
        while (nextcar.next() > 2)
        prevcar = nextcar;
        nextcar = nextcar.next();
    }
    prevcar.setNext(null);
    size--;
}

这种方法存在一些问题:

  • 你的方法是void,而你想返回最后一项的数据?

  • while循环既不使用括号({}(也不使用缩进,因此只有prevcar = nextcar会被执行无限多次。

  • 您使用>2

  • 有一种情况是链接列表也可以为空。

一个可能更好的处理方法:

public String removeBoxcarFromEnd() {
    String result;
    if(head == null) {  //empty list
        return null;      //or do something else? throw an exception?
    } else if (head.next() == null) {  //one element, remove it
        int result = head.data();
        head = null;
    }    
    else {  //more elements
        Boxcar prevcar = head, nextcar = head.next(), ffcar = nextcar.next();
        while (ffcar != null) {  //double next iteration
            prevcar = nextcar;
            nextcar = ffcar;
            ffcar = ffcar.next();
        }
        int result = nextcar.data(); //get result
        prevcar.setNext(null);       //remove it from the linked list
    }
    size--;
    return result;
}

假设不需要提取数据,只删除最后一个Boxcar:

public void removeBoxcarFromEnd() {
    Boxcar prevcar = head;
    Boxcar nextcar = head;
    if (head == null || head.next() == null) {
        return;
    }
    while (nextcar.next() != null) {
        prevcar = nextcar;
        nextcar = nextcar.next();
    }
    prevcar.setNext(null);
}

首先,我们检查一个null或一个元素列表;在这种情况下,没有什么可做的。

接下来,我们遍历列表,直到到达末尾(即nextCar.next()返回null(。在每一步中,我们都会保存正在通过的Boxcar

当我们退出循环时,prevcar指向倒数第二辆车,我们可以安全地将其next变量设置为null

相关内容

  • 没有找到相关文章

最新更新