2016-07-14 6 views
0

Ich versuche, den letzten Knoten in LinkedList zu löschen. Für den Eingang: 1, 2, 3 Ausgang sollte sein: 1, 2Implementieren einer Methode zum Löschen des letzten Knotens einer verknüpften Liste

Ich bin in der Lage, den Knoten zu löschen, aber gibt es einen besseren/effizienteren Weg?

Bitte überprüfen Sie die removeLastNode() Methode.

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; 
    } 


} 

}

+0

Sie können eine doppelt verkettete Liste verwenden, wobei jeder Knoten die Adresse zu dem vorherigen und dem nächsten Knoten gespeichert – Slimu

+0

Beachten Sie, dass 'Java's Klasse' LinkedList' eine 'doppelt verknüpfte list' implementiert durch ** Standard * *, es handelt sich nicht um eine normale 'Linked List'! Sie können also bereits mit 'LinkedList' von Java arbeiten. Oder, wenn Sie es selbst implementieren müssen, können Sie dort nachschlagen, wie es gemacht wird. – Zabuza

Antwort

0

Verwenden Sie, dass tail der letzte Knoten ist.

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; 
    } 
} 
+0

danke..Joop Eggen – Premkumar

1

hinzufügen Node previous Attribut auf den Node und ein Node last zu LinkedList eine DoubleLinkedList zu bekommen.

Dann können Sie so etwas wie

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); 
Verwandte Themen