2016-06-08 4 views
0

такой, что если элемент, подлежащий удалению, является первым элементом списка, а список содержит только один элемент, вам нужно только присвоить значение null для pfirst и plast. Если элемент, подлежащий удалению, является первым элементом списка, а список содержит более одного элемента, вам нужна временная переменная, указывающая на pfirst, затем переместите pfirst, чтобы указать на следующий ее элемент, и установите временную переменную в значение null.Удалить элемент одиночно связанного списка

Вот мой код, который не работает, как ожидалось

+2

Вы забыли добавить свой код. Для этого воспользуйтесь опцией [edit]. – Pshemo

ответ

3

швы на ваш вопрос является неполным, поскольку он не имеет код с ним бу, а я могу показать, как реализовать и удалить список

public class SinglyLinkedList { 


    public void addLast(SinglyLinkedListNode newNode) { 

     if (newNode == null) 

       return; 

     else { 

       newNode.next = null; 

       if (head == null) { 

        head = newNode; 

        tail = newNode; 

       } else { 

        tail.next = newNode; 

        tail = newNode; 

       } 

     } 

    } 



    public void addFirst(SinglyLinkedListNode newNode) { 

     if (newNode == null) 

       return; 

     else { 

       if (head == null) { 

        newNode.next = null; 

        head = newNode; 

        tail = newNode; 

       } else { 

        newNode.next = head; 

        head = newNode; 

       } 

     } 

    } 



    public void insertAfter(SinglyLinkedListNode previous, 

       SinglyLinkedListNode newNode) { 

     if (newNode == null) 

       return; 

     else { 

       if (previous == null) 

        addFirst(newNode); 

       else if (previous == tail) 

        addLast(newNode); 

       else { 

        SinglyLinkedListNode next = previous.next; 

        previous.next = newNode; 

        newNode.next = next; 

       } 

     } 

    } 

}  

включить этот метод в том же классе

// delete an item from the linked list 

    public void delete(int pos) 

    { 

     if (countitem() > 0){ 

     //make sure the list is not empty. 

     ListNode<T> temp,del; 

     if (pos== 1){ 

      //delete the first item 
      if(countitem()==1){ //The list contains only one item 
       pfirst=null; 
       plast=null; 

       }else 
     { 
      //The list contains more than one item 
      temp=pfirst; 

      pfirst=pfirst.next; 

      temp=null; 
     } 
     System.out.println("Deleted"); 


    } 

     else if (pos > 1 && pos <=countitem()){ 

      //delete middle item 

      temp=pfirst; 

      int i; 

     for(i=1;i<pos-1;i=i+1) 

      {temp=temp.next;} //move to the item staying before the target item to be deleted 

     del=temp.next; //target item to be deleted 

     temp.next=del.next; 

     if(del.next==null) 

     plast=temp; //delete last item 

     del=null; 


     System.out.println("Deleted"); 

     } 

    else System.out.println("Invalid position!"); 

    } 

    else System.out.println("No item found"); 

} 
+0

спасибо позвольте мне попробовать. –

+0

все лучшее в кодировании –

1

Вопрос не ясно, в нем присутствует формат. Если вы пытаетесь выполнить некоторые пользовательские операции/сек в списке, лучше оберните интерфейс списка и выполните операцию в списке

import java.util.List; 


public class SinglyList<T> 
{ 
    List<T> list; 

    private SinglyList(List<T> list) 
    { 
     super(); 
     this.list = list; 
    } 

    public T delete(){ 
     return list.remove(0); 
    } 
} 
Смежные вопросы