2016-04-13 27 views
0

Bağlantılı bir listeden bir ölçütleri karşılayan katları düğümleri silmeye çalışıyorum. Program biraz karmaşıktır, bu yüzden onu ele alacağım.Bağlantılı listeden birden çok düğüm silme java

public void Delete(Int N) { 

     Node current = Head; 
     Node previous = Head; 


     while (current.getNum() != N) { 

      if (current.getNextNode() == null) { 

       System.out.print("Not found"); 

      } else { 

       previous = current; 

       current = current.getNextNode(); 

      } 

     } 

     if (current == Head) { 

      Head = Head.getNextNode(); 

     } else { 

      Node A = current.getNextNode(); 
      previous.setNextNode(A); 

     } 

    } 
: Ben sayı ile 1. My silme işlevini düğümleri silmek isterler

Name Number 
Dog  1 
Cat  1 
Rat  2 
Donkey 3 
Fish 1 

: my bağlantılı listesinde düğümleri (bir numara ile ilişkili bir isim) aşağıdaki özelliklere sahiptir

Bu çalışır, ancak sadece ilk oluşumu kaldırır. Bunun uygun bir döngü yapısının olmamasından kaynaklandığını biliyorum, ancak saatlerce bunun üzerinde çalışıyorum ve yol boyunca kafam karışıyor. Elle bir izleme tablosu yapmayı denedim ama bu da çalışmıyor.

İşlev, tüm bağlı listelerde dolaşacak ve ölçütlerle eşleşen düğümleri kaldıracak şekilde nasıl düzenlenebilir?

cevap

0

Daha sonra döngü, bu düğüm için bir düğümü kaldırmak istediğiniz özellikle belirtilmelidir.

Node prev = null; 
while (current != null) { 
    Node next = current.getNextNode() 
    if(current.getNum() == N){ 
     //condition to remove current node has been found. 
     if(prev == null){ 
      Head = next; 
     } else { 
      prev.setNextNode(next); 
     } 
    } else { 
     //only advance prev if we haven't deleted something 
     prev = current; 
    } 
    current = current.getNextNode(); 
} 
1

Bu bağlantılı listeden eşleşen Node örneklerini kaldırmak olmalıdır:

Sizin döngü while (current.getNum() != N) Eğer tüm liste üzerinden gitmek isterseniz N. numarası olan bir düğümün ilk geçtiği sonra sona erecek
public void delete(int n) { 

    int count = 0; 

    Node prev = null, next; 
    for (Node current = head; current != null; current = next) { 
     next = current.getNextNode(); 
     if (current.getNum() == n) { 
      count++; 
      if (prev != null) { 
       prev.setNextNode(next); 
      } else { 
       head = next; 
      } 
     } else { 
      prev = current; 
     } 
    } 

    System.out.print(count > 0 ? ("Number deleted: " + count) : "Not found"); 
} 
0

Eğer LinkedList bir düğümü silmek istiyorsanız,

  1. sayı değildir ki sadece düğümlerle bir yeni bağlantılı liste N
  2. eşittir aşağıdaki yollardan herhangi birini kullanabilirsiniz
  3. veya mevcut olanı değiştirin.

I sayısı N'ye eşit değildir edildiği elemanı ile yeni bir bağlantılı liste oluşturmak için ilk yol kullandık

class Node { 

    public String name; 
    public int number; 
    public Node next; 
} 

public class LinkedListTest { 

    public static void main(String[] args) { 

     LinkedListTest obj = new LinkedListTest(); 
     Node head = obj.createLinkList(); 
     Node startPointer = head; 
     while (startPointer != null) { 

      System.out.println(startPointer.name + " " + startPointer.number); 
      startPointer = startPointer.next; 
     } 
     System.out.println("***********"); 
     Node newNodeHead = obj.deleteNode(1, head); 
     startPointer = newNodeHead; 
     while (startPointer != null) { 

      System.out.println(startPointer.name + " " + startPointer.number); 
      startPointer = startPointer.next; 
     } 

    } 

    public Node deleteNode(int n, Node head) { 

     Node current = head; 
     Node newNodestartPointer = null; 
     Node newNodeCurrent = null; 
     while (current != null) { 

      if (!(current.number == n)) { 

       if (newNodestartPointer == null) { 
        newNodestartPointer = new Node(); 
        newNodestartPointer.name = current.name; 
        newNodestartPointer.number = current.number; 
        newNodestartPointer.next = null; 
        newNodeCurrent = newNodestartPointer; 
       } else { 

        Node newNode = new Node(); 
        newNode.name = current.name; 
        newNode.number = current.number; 
        newNodeCurrent.next = newNode; 
        newNodeCurrent = newNode; 
       } 
      } 
      current = current.next; 
     } 

     return newNodestartPointer; 
    } 

    public Node createLinkList() { 

     Node head = null; 

     Node newNode = new Node(); 
     newNode.name = "Dog"; 
     newNode.number = 1; 
     newNode.next = null; 

     head = newNode; 

     newNode = new Node(); 
     newNode.name = "Cat"; 
     newNode.number = 1; 
     newNode.next = null; 
     head.next = newNode; 
     Node prevNode = newNode; 

     newNode = new Node(); 
     newNode.name = "Rat"; 
     newNode.number = 2; 
     newNode.next = null; 
     prevNode.next = newNode; 
     prevNode = newNode; 

     newNode = new Node(); 
     newNode.name = "Donkey"; 
     newNode.number = 3; 
     newNode.next = null; 
     prevNode.next = newNode; 

     return head; 
    } 
} 
İlgili konular