Я хочу найти число между связанным списком - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь найти способ получения промежуточного числа в списке, используя inBetween как открытый метод.

Класс DoubleLinked:

public class DoublyLinkedList
   {
   private Link first;               // ref to first item
   private Link last;                // ref to last item
// -------------------------------------------------------------
   public DoublyLinkedList()         // constructor
      {
      first = null;                  // no items on list yet
      last = null;
      }
// -------------------------------------------------------------
   public boolean isEmpty()          // true if no links
      { return first==null; }
// -------------------------------------------------------------
   public void insertFirst(long dd)  // insert at front of list
      {
      Link newLink = new Link(dd);   // make new link

      if( isEmpty() )                // if empty list,
         last = newLink;             // newLink <-- last
      else
         first.previous = newLink;   // newLink <-- old first
      newLink.next = first;          // newLink --> old first
      first = newLink;               // first --> newLink
      }
// -------------------------------------------------------------
   public void insertLast(long dd)   // insert at end of list
      {
      Link newLink = new Link(dd);   // make new link
      if( isEmpty() )                // if empty list,
         first = newLink;            // first --> newLink
      else
         {
         last.next = newLink;        // old last --> newLink
         newLink.previous = last;    // old last <-- newLink
         }
      last = newLink;                // newLink <-- last
      }
// -------------------------------------------------------------
   public Link deleteFirst()         // delete first link
      {                              // (assumes non-empty list)
      Link temp = first;
      if(first.next == null)         // if only one item
         last = null;                // null <-- last
      else
         first.next.previous = null; // null <-- old next
      first = first.next;            // first --> old next
      return temp;
      }
// -------------------------------------------------------------
   public Link deleteLast()          // delete last link
      {                              // (assumes non-empty list)
      Link temp = last;
      if(first.next == null)         // if only one item
         first = null;               // first --> null
      else
         last.previous.next = null;  // old previous --> null
      last = last.previous;          // old previous <-- last
      return temp;
      }
// -------------------------------------------------------------
                                     // insert dd just after key
   public boolean insertAfter(long key, long dd)
      {                              // (assumes non-empty list)
      Link current = first;          // start at beginning
      while(current.dData != key)    // until match is found,
         {
         current = current.next;     // move to next link
         if(current == null)
            return false;            // didn't find it
         }
      Link newLink = new Link(dd);   // make new link

      if(current==last)              // if last link,
         {
         newLink.next = null;        // newLink --> null
         last = newLink;             // newLink <-- last
         }
      else                           // not last link,
         {
         newLink.next = current.next; // newLink --> old next
                                      // newLink <-- old next
         current.next.previous = newLink;
         }
      newLink.previous = current;    // old current <-- newLink
      current.next = newLink;        // old current --> newLink
      return true;                   // found it, did insertion
      }
// -------------------------------------------------------------
   public Link deleteKey(long key)   // delete item w/ given key
      {                              // (assumes non-empty list)
      Link current = first;          // start at beginning
      while(current.dData != key)    // until match is found,
         {
         current = current.next;     // move to next link
         if(current == null)
            return null;             // didn't find it
         }
      if(current==first)             // found it; first item?
         first = current.next;       // first --> old next
      else                           // not first
                                     // old previous --> old next
         current.previous.next = current.next;

      if(current==last)              // last item?
         last = current.previous;    // old previous <-- last
      else                           // not last
                                     // old previous <-- old next
         current.next.previous = current.previous;
      return current;                // return value
      }
// -------------------------------------------------------------
   public void displayForward()
      {
      System.out.print("List (first-->last): ");
      Link current = first;          // start at beginning
      while(current != null)         // until end of list,
         {
         current.displayLink();      // display data
         current = current.next;     // move to next link
         }
      System.out.println("");
      }
// -------------------------------------------------------------
   public void displayBackward()
      {
      System.out.print("List (last-->first): ");
      Link current = last;           // start at end
      while(current != null)         // until start of list,
         {
         current.displayLink();      // display data
         current = current.previous; // move to previous link
         }
      System.out.println("");
      }
// -------------------------------------------------------------
   }  // end class DoublyLinkedList

Класс InBetweenDemo в качествеОсновной класс:

public class InBetweenDemo
{
   public static void main(String[] args)
      {                             // make a new list
      DoublyLinkedList theList = new DoublyLinkedList();

      theList.insertFirst(22);      // insert at front
      theList.insertFirst(44);
      theList.insertFirst(66);

      theList.insertLast(11);       // insert at rear
      theList.insertLast(33);
      theList.insertLast(55);

      theList.displayForward(); 
      int n=55;// display list forward
      System.out.println("inBetween("+n+") "+ theList.inBetween(n));

      theList.deleteFirst();        // delete first item
      theList.displayForward(); 
      n=55;
      System.out.println("inBetween("+n+") "+ theList.inBetween(n));

      theList.deleteLast(); 
      theList.displayForward(); 
      n=33;
      System.out.println("inBetween("+n+") "+ theList.inBetween(n));
      theList.deleteKey(22);        // delete item with key 11
      theList.displayForward(); 

      System.out.println("inBetween("+n+") "+ theList.inBetween(n));
      n=99;
      System.out.println("inBetween("+n+") "+ theList.inBetween(n));

      theList.displayForward();     // display list forward

      theList.insertAfter(11, 77);  // insert 77 after 22
      theList.insertAfter(33, 88);  // insert 88 after 33

      theList.displayForward();     // display list forward
      }  // end main()
   }  // end class DoublyLinkedApp
////////////////////////////////////////////////////////////////

Я планировал, что метод inBetween примет элемент в качестве его параметра и вернет true, если элемент находится между самым маленьким и самым большим элементом в этом списке.В противном случае метод возвращает false.Однако я не уверен, как написать это в коде.Кроме того, мне интересно, если элемент удален, если самый маленький элемент удален в списке, или самый большой элемент удален в списке, программа может не знать, какой элемент самый большой и самый маленький.Так я должен также использовать метод, чтобы сначала получить максимум и минимум?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете создать метод inBetween, который принимает число в качестве параметра, и внутри вы можете вызвать метод, в котором вы будете реализовывать свой алгоритм определения минимального и максимального значения в списке. ПРИМЕЧАНИЕ Это будет работать только в том случае, если ваш список определен глобально, а не определенным методом, в противном случае вам придется также предоставить список в качестве параметра для метода inBetween.Таким образом, в псевдокоде вы можете сделать:

inBetween(numberToBeChecked):
   max = getMax(yourList)
   min = getMin(yourList)        // you can implement this in one method and return an array containing of two elements for example. It's your choice.
   if (numberToBeChecked > min && numberToBeChecked < max):
          return True
   else:
          return False

Надеюсь, это поможет.

...