实现删除链表的最后一个节点的方法

时间:2016-07-14 10:23:14

标签: java data-structures linked-list

我正在尝试删除LinkedList中的最后一个节点。 输入:1,2,3 输出应为:1,2

我可以删除节点,但有更好/更有效的方法吗?

请检查removeLastNode()方法。

public class MyLinkedList {

Node head;
Node tail;

public void add(int number){

    Node node=new Node();
    node.setNumber(number);

    if(head==null){
        head=node;
        tail=node;  
    }
    else{
        tail.next=node;
        tail=node;          
    }

}



public void removeLastNode(){   
    Node temp=head;
    Node head1=null;
    Node tail1=null;


    while(temp.next!=null){

        Node node=new Node();
        node.number=temp.number;
        if(head1==null){
            head1=node;
            tail1=node; 
        }
        else{
            tail1.next=node;
            tail1=node;         
        }
        if(temp.next.next==null){               
            temp.next=null;
            break;
        }

        temp=temp.next;

    }
    head=head1;


}


@Override
public String toString(){
    while(head!=null){
        System.out.print(head.getNumber()+" ");
        head=head.getNext();
    }
    return "";
}

public static void main(String ar[]){

    MyLinkedList list=new MyLinkedList();
    list.add(1);
    list.add(2);
    list.add(3);
    list.removeLastNode();

    System.out.println(list);
}




public class Node{

    Node next;
    int number;
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }


}

}

3 个答案:

答案 0 :(得分:1)

Node previous添加Node属性,向LinkedList添加Node last以获取DoubleLinkedList。

然后你可以做类似

的事情
Node temp = List.getLast().getPrevious(); //returns the second last item
List.removeLast();    //sets the last item to null
List.setLast(temp);   //sets the last item to the second last item
List.getLast().setNext(null);

答案 1 :(得分:0)

使用tail是最后一个节点。

public void removeLastNode() {
    if (head == null) {
        throw new IllegalStateException();
    }
    if (head == tail) {
        head = null;
        tail = null;
    } else {
        Node current = head;
        while (current.next != tail) {
            current = current.next;
        }
        current.next = null;
        tail = current;
    }
}

答案 2 :(得分:0)

是的,您可以通过跟踪上一个节点来从链接列表中删除最后一个节点。

public int deleteAtLast() {
    if (head == null) {
        return 0;
    } else {
        Node prevoursNode = null;
        Node n = head;
        while (n.next != null) {
            prevoursNode=n;
            n = n.next;
        }
        int data = n.data;
        prevoursNode.next=null;
        return data;
    }

}