2016-10-12 3 views
0

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

public class DLL { 

     private charNode DLLleft, DLLright; 

     class charNode { 
       char data; 
       charNode left; 
       charNode right; 

       public charNode(char D, charNode l, charNode r) { 
        data=D; 
        left = l; 
        right = r; 
       } 
     } 

     public DLL() { 
      DLLleft= null; 
      DLLright= null; 
     } 
     public void addDLLleft(char data){ 
      charNode temp = new charNode(data, null, DLLleft); 
      if(DLLleft ==null) 
       DLLright = temp; 
      else 
       DLLleft.left=temp; 
       DLLleft = temp; 
     } 
     public void addDLLright(char data){ 
      charNode temp = new charNode(data, null, DLLright); 
      if(DLLright == null) 
       DLLleft = temp; 
      else 
       DLLright.right = temp; 
       DLLright = temp; 
     } 
     public char removeDLLright(char data){ 
      charNode temp = DLLright; 
      while (data == DLLright.data); 

     } 
     public void printRtoL(){ 
      charNode temp = DLLright; 
      while(temp != null){ 
       System.out.println(temp.data); 
       temp = temp.left; 
      } 
     } 
     public void printLtoR(){ 
      charNode temp = DLLleft; 
      while(temp != null){ 
       System.out.println(temp.data); 
       temp = temp.right; 
      } 
     } 
     public void clearDLL(){ 
      DLLleft = null; 
      DLLright = null; 
     } 
    } 

это то, что у меня есть до сих пор, но я застрял на том, как удалить из списка и проверить с палиндрома.

ответ

1

Это было бы очень просто с помощью одного рекурсивного метода ... Однако давайте немного повеселимся. Чтобы сделать его более читаемым, я переименую некоторые из ваших переменных (я сохраню имена методов, чтобы вы знали, что происходит).

public class DLL<E> { 

    private charNode head; 
    private charNode tail; 
    private int size; 

    private class charNode { 
      E element; 
      charNode next; 
      charNode prev; 

      public charNode(E element, charNode next, charNode prev) { 
       this.element = element; 
       this.next = next; 
       this.prev = prev; 
      } 
    } 

    public void addDLLleft(E element){ 
     charNode temp = new charNode(element, head, null); 
     if(head != null) { 
      head.prev = temp; 
     } 
     head = temp; 
     if(tail == null) { 
      tail = temp; 
     } 
     size++; 
    } 
    public void addDLLright(char data){ 
     charNode temp = new charNode(element, null, tail); 
     if(tail != null) { 
      tail.next = temp; 
     } 
     tail = temp; 
     if(head == null) { 
      head = temp; 
     } 
     size++; 
    } 

    public E removeDLLleft(){ 
     if (size == 0) throw new NoSuchElementException(); 
     charNode temp = head; 
     head = head.next; 
     head.prev = null; 
     size--; 
     return temp.element; 
    } 

    public E removeDLLright(){ 
     if (size == 0) throw new NoSuchElementException(); 
     Node temp = tail; 
     tail = tail.prev; 
     tail.next = null; 
     size--; 
     return temp.element; 

    } 

    public void printRtoL(){ 
     charNode temp = tail; 
     while(temp != null){ 
      System.out.println(temp.element); 
      temp = temp.prev; 
     } 
    } 

    public void printLtoR(){ 
     charNode temp = head; 
     while(temp != null){ 
      System.out.println(temp.element); 
      temp = temp.next; 
     } 
    } 

    public void clearDLL(){ 
     DLLleft = null; 
     DLLright = null; 
    } 

    // Necessary 
    public int size() { 
     return size; 
    } 
} 
Смежные вопросы