簡體   English   中英

從自定義 LinkedList 中刪除元素的所有實例

[英]Removing all instances of an element from a custom LinkedList

我試圖從列表中刪除所有在我的自定義 LinkedList class 中具有相同課程名稱的人。我已經設法讓我的程序根據數字單獨刪除人,但無法弄清楚如何一次刪除多個人。 我在網上瀏覽過任何解決方案,到目前為止已經嘗試了多種解決方案,但都沒有成功我自己也嘗試過一個,但也沒有成功任何幫助或鏈接到我可以學習的模式將不勝感激。 下面是我的驅動程序、LinkedList 和 LinearNode class。我還刪除了我認為與此解決方案無關的代碼:)。

鏈表 Class



public class LinkedList<T> implements LinkedListADT<T> {
    
     private int count;  // the current number of elements in the list
     private LinearNode<T> list; //pointer to the first element 
     private LinearNode<T> last; //pointer to the last element 
     
     //-----------------------------------------------------------------
     //  Creates an empty list.
     //-----------------------------------------------------------------
        public LinkedList()
        {
           this.count = 0;
           this.last = null;
           this.list = null;
        }
       public void add (T element)
       {      
           LinearNode<T> node = new LinearNode<T> (element); 
       
           if (size() == 0) {  
                this.last = node; // This is the last and the 
                this.list = node; // first node
                this.count++;
           }//end if
           else
             { 
                  last.setNext(node); // add node to the end of the list
                  last = node; // now make this the new last node.
                  this.count++;   
              } //end else
       }
       
       public T remove()
       {
           LinearNode<T> current = list;
           LinearNode<T> temp = list;
           T result = null;
          
            if (current == null) {
                System.out.println("There are no such employees in the list");
            }//end if
            else {
            
                result = this.list.getElement();
                temp = list;
                this.list = this.list.getNext();
                temp.setNext(null); //dereference the original first element
                count--;
            }//end else
            return result;

       }
       
       public T remove(T element) 
       {
           LinearNode<T> current = list;
           LinearNode<T> previous = list;
           LinearNode<T> temp;
           T result = null;
           
            if (current == null) {
                
                System.out.println("There are no such employees in the list");
            }//end if
            else {
                
                for (current = this.list; current != null && !current.getElement().equals(element); current = current.getNext())
                   {
                    previous = current;
                
                   }
                if(current == null) {
                    System.out.println("No such employee on the list");
                }
                else if (current == list)
                {
                    remove();
                }
                else if(current == last) {
                    previous.setNext(null); 
                    this.last = previous.getNext();
                    
                    count--;
                }
                else
                {
                    previous.setNext(current.getNext());
                    count--;
                }
                
            }
            
            return result;
       }
**
  My attempted Solution**
       
       public T clear(T element) {
           T result = null;
            while (this.list != null && this.list.getElement() == element) {
                this.list = this.list.getNext();
             count--;
            }

            if (this.list == null) {
                return result;
            }

            LinearNode<T> current = this.list;
            while (current.getNext() != null) {
                if (current.getNext().getElement() == element) {
                    current.setNext(current.getNext());
                    count--;
                } else {
                    current = current.getNext();
                }
                
            }
            return result;
        }
      
}

線性節點 Class

public class LinearNode<T>
{
   private LinearNode<T> next;
   private T element;

   //---------------------------------------------------------
   //  Creates an empty node.
   //---------------------------------------------------------
   public LinearNode()
   {
      this.next = null;
      this.element = null;
   }

   //---------------------------------------------------------
   //  Creates a node storing the specified element.
   //---------------------------------------------------------
   public LinearNode (T elem)
   {
      this.next = null;
      this.element = elem;
   }

   //---------------------------------------------------------
   //  Returns the node that follows this one.
   //---------------------------------------------------------
   public LinearNode<T> getNext()
   {
      return this.next;
   }

   //---------------------------------------------------------
   //  Sets the node that follows this one.
   //---------------------------------------------------------
   public void setNext (LinearNode<T> node)
   {
      this.next = node;
   }

   //---------------------------------------------------------
   //  Returns the element stored in this node.
   //---------------------------------------------------------
   public T getElement()
   {
      return this.element;
   }

   //---------------------------------------------------------
   //  Sets the element stored in this node.
   //---------------------------------------------------------
   public void setElement (T elem)
   {
      this.element = elem;
   }
}

司機 Class


public class TrainingCourses {

    LinkedList<employee>list;
    int Size =10;
     int numberofEmployees=0;
    
    
    
    public TrainingCourses() {
     list = new LinkedList<employee>();
    
    

     inputEmployee();
     displayEmployee();
     deleteCourses();
     displayEmployee();

         
          
    }
    

    
    public void inputEmployee() {
        employee a;
        a = null;
        String number,name,courseName = null;
        int years;
        
        
        
        Scanner scan = new Scanner(System.in);
        
        
    
         for (int count = 1; count<=numberofEmployees; count++){
        System.out.println("Input employee number");
        number = scan.nextLine();
        System.out.println("Input employee name");
        name = scan.nextLine();
        System.out.println("Input years at organisation");
        years = scan.nextInt(); scan.nextLine();
        if(years >=5) {
        System.out.println("Input course name");
        courseName = scan.nextLine();
        }else {
            System.out.println("Can not join training course employee must be with organisation 5 or more years");
        
        }
        
        a = new employee(number,name,years,courseName);
        
        
        list.add(a);
    
            }
    
    }
    public void displayEmployee() {
         System.out.println("\nDisplaying all employees....");

            System.out.println(list.toString());
        
    }
    
    

        
    public void deleteCourses(){
         {
             Scanner scan = new Scanner(System.in);
                employee b = null;
                String number,name,courseName;
                int years;

                System.out.println("Enter employee number you wish to remove");
                number = scan.nextLine();
                System.out.println("Input employee name");
                name = scan.nextLine();
                System.out.println("Input years at organisation");
                years = scan.nextInt(); scan.nextLine();
                System.out.println("Input course name");
                courseName = scan.nextLine();
                
                b = new employee(number,name,years,courseName);
                  
                list.clear(b);
               
        }
            
        
    }
    public static void main(String[]args) {
        new TrainingCourses();
    }
}

我不明白你到底想要什么,因為你寫道你想要“從列表中刪除所有具有相同課程名稱的人” ,但是你的代碼從不只檢查屬性,你的代碼檢查到處都是平等的。

此示例 clear function 刪除所有等於 param 的元素並返回已刪除元素的計數。

public long clear(T element) {
    long result = 0L;
    
    LinearNode<T> current = this.list;
    LinearNode<T> previous = null;
    while (current != null) {
        if (current.getElement().equals(element)) {
            if (previous != null) {
                if (current.getNext() != null) {
                    previous.setNext(current.getNext());
                } else {
                    this.last = previous;
                }
            } else if (current.getNext() != null) {
                this.list = current.getNext();
            } else {
                this.list = this.last = null;
            }
            this.count--;
            result++;
        } else {
            previous = current;
        }
        current = current.getNext();
    }

    return result;
}

畢竟.equals(..)只為真,如果比較的對象有一個 equals() 方法並檢查其內容是否相等,否則兩個對象通過==運算符相等,如果它們完全相同(不是通過內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM