我想在链表之间找到数字

问题描述 投票:0回答:1

我试图找到如何使用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 Class作为Main类:

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。但是我不知道如何在代码中编写它。此外,我想知道如果项目是否在列表中删除最小项目或列表中删除了最大项目,程序可能不知道哪个项目是最大和最小的。那么我是否还应该使用一种方法来获得最大值和最小值?

java linked-list doubly-linked-list
1个回答
1
投票

您可以创建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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.