从java中的LinkedList删除第二个最后一个节点

时间:2014-02-02 05:52:20

标签: java linked-list

我正在开发一个应该在最后一个节点之前删除节点的方法,这个逻辑对我很好,但是当我试图在一个项目中实现它时,它没有做到锻炼。 (哦,我正在使用MyLinkedList)

这里是代码:

public void deleteSec(){
    Node current = head;
    Node p = head.next;
    Node q = null;

    while(p.next!=null){
        q = current;
        current.next = p;
        p = p.next;
    }
    q.next = p; // q.next = q.next.next;
}

4 个答案:

答案 0 :(得分:1)

如果你的LL是空的怎么办? head将为null,当您调用head.next;

时,这将导致异常

你必须处理特殊情况,例如:空LL,LL和一个节点,LL有两个节点。

这是我的代码:

public void deleteSec() {
    if (head == null) {
        return;
    }
    if (head.next == null) {
        return;
    }
    if (head.next.next == null) {
        head = head.next;
        return;
    }
    Node current = head;
    Node p = current.next;
    Node q = p.next;
    while (q.next != null) {
        current = current.next;
        p = p.next;
        q = q.next;
    }
    current.next = q;
}

答案 1 :(得分:0)

if(myLinkedList.size() > 1) {
    myLinkedList.remove(myLinkedList.size()-2);
}

答案 2 :(得分:0)

我个人编译它,

假设节点类名为Node,并且您有一个返回下一个Node的getNext()方法,或者如果此节点是最后一个节点,则返回null,您可以这样做。

if (head == null) // or if (first == null)
{
return; // There are no elements in the list.
}
Node currect = head; // This is the head, or Node current = first;
Node previous = null;
while (current.getNext() != null)
{
previous = current;
currrent = current.getNext();
}

Then do this to make the second to last pointer to next null.
if (previous != null)
{
previous.setNext( null );
}
else
{
// The list has 1 entry only.
head = null; // or first = null;
}

答案 3 :(得分:0)

如果删除倒数第二个节点是常见的操作(在我的情况下,我建议在prev结构中添加一个额外的previousNode节点。 / p>

通常,链接列表节点为

private static class Node<Item> {
    private Item item;
    private Node<Item> next;
}

但是我将其修改为

private static class Node<Item> {
    private Item item;
    private Node<Item> prev;
    private Node<Item> next;
}

因此,如果要删除倒数第二个,则实现将非常简单:

oldSecondLast = last.prev; // Assumes last points to the last node
oldSecondLast.next = last;
last = oldSecondLast.prev;
oldSecondLast = null; // To avoid loitering