2017-11-26 7 views
-1

ダブルリンクリストを作成しようとしていますが、removeLastメソッドに問題があります。例えば、私は値1、3、5頭であり、かつ5テールいる1と整数のリストを持っていた場合JavaダブルリンクリストPrevious

public class Node<E> { 

E data; 
public Node<E> next; 
public Node<E> prev; 

public Node(E d) 
{ 
    data = d; 
} 

public E getData() 
{ 
    return data; 
} 

} 


public class TestList<E> { 

Node<E> head; 
Node<E> tail; 

public void addLast(E data) 
{ 

    Node<E> newData = new Node<E>(data); 

    if (head == null) 
    { 
     head = newData; 
     tail = newData; 
    } 

    else 
    { 
     Node<E> current = head; 

     while (current.next != null) 
      current = current.next; 

     current.next = newData; 
     tail = current.next; 

    } 

} 

public void removeLast() 
{ 

    if (head == null) 
     System.out.println("List is empty!"); 

    else 
    { 
     Node<E> current = tail; 



    } 


} 

、私のremoveLast方法で私は、現在を作ることができる方法を知っていただきたいと思います。 prevが3を指し、current.prev.prevが1を指している場合、この場合は次の値を指し示すだけで、この場合はnullになります。

+0

また、addLast()メソッドにも注意してください。これは間違っていて、不必要に非効率的です。 –

答えて

0

addLast()removeLest()の両方を、両方の方法で3つの異なる状況で修正する必要があります。

public final class TestList<E> { 
    private Node<E> head; 
    private Node<E> tail; 

    public void addLast(E data) { 
     Node<E> node = new Node<>(data); 

     if (head == null) 
      head = tail = node; 
     else if (head == tail) { 
      tail = node; 
      head.next = tail; 
      tail.prev = head; 
     } else { 
      tail.next = node; 
      node.prev = tail; 
      tail = node; 
     } 
    } 

    public void removeLast() { 
     if (tail == null) 
      System.err.println("List is empty!"); 
     else if (head == tail) 
      head = tail = null; 
     else { 
      Node<E> prev = tail.prev; 
      tail.prev = null; 
      tail = null; 
      tail = prev; 
      tail.next = null; 
     } 
    } 

    private static final class Node<E> { 
     E data; 
     Node<E> next; 
     Node<E> prev; 

     public Node(E data) { 
      this.data = data; 
     } 
    } 
} 
0

あなたが行うことができます。リストがすでに空である場合は、

  • を頭が尾と同じであれば、何も
  • もないともしません(リスト内の唯一の要素がある)、そしてクリアリスト
  • さもないと、nulltail.prev.nextポイントを作る、その後、このようtail = prev

ます

public void removeLast() { 
    if (head == null) { 
     System.out.println("List is empty!"); 
     return; 
    } 

    if (head == tail) { 
     head = tail = null; 
     return; 
    } 

    Node<E> prev = tail.prev; 
    prev.next = null; 
    tail = prev; 
} 
関連する問題