2017-08-05 14 views
0
public class Node<E> { 

    private E element; 
    public Node<E> next; 
int data; 

    Node(int d) 
    { 
     data = d; 
     next = null; 
    } 
    public Node(E element, Node<E> next) { 
     this.element = element; 
     this.next = next; 
    } 

    public E getElement() { 
     return element; 
    } 

    public Node<E> getNext() { 
     return next; 
    } 

    public void setElement(E element) { 
     this.element=element; 
    } 

    public void setNext(Node<E> n) { 
     next = n; 
    } 
    public void displayNode(){ 
      System.out.print(element+ " "); 
     } 

} 


public class SinglyLinkedList<E> { 

    private Node<E> head; 
    private Node<E> tail; 
    private int size; 

    public SinglyLinkedList() { 
     head = tail = null; 
     size = 0; 
    } 

    public SinglyLinkedList(Node<E> head, Node<E> tail) { 
     this.head = head; 
     this.tail = tail; 
    } 

    public Node<E> getHead() { 
     return head; 
    } 

    public Node<E> getTail() { 
     return tail; 
    } 

    public void setHead(Node<E> head) { 
     this.head = head; 
    } 

    public void setTail(Node<E> tail) { 
     this.tail = tail; 
    } 

    public boolean isEmpty() { 
     if (head == null) { 
      return true; 
     } 

     return false; 

    } 

    public E first() { 
     return head.getElement(); 
    } 

    public E last() { 
     return tail.getElement(); 
    } 

    public void addFirst(E e) { 
     if (head == null) { 
      head = tail = new Node(e, null); 

     } else { 
      Node<E> newest = new Node(e, head); 
      head = newest; 
     } 
     size++; 
    } 

    public void addLast(E e) { 
     if (tail == null) { 
      head = tail = new Node(e, null); 

     } else { 
      Node<E> newest = new Node(e, null); 
      tail.setNext(newest); 
      tail = newest; 
     } 
     size++; 
    } 

    public E removeFirst() { 
     E e = head.getElement(); 
     head = head.getNext(); 
     size--; 
     return e; 
    } 

    @Override 
    public String toString() { 
     Node<E> tmp = head; 
     String s = ""; 
     while (tmp != null) { 
      s += tmp.getElement(); 
      tmp=tmp.getNext(); 

     } 
     return s; 
    } 


    public void displayList() { 
     Node current = head; 
     while (current != null) { 
      current.displayNode(); 
      current = current.next; 
     } 
    } 


} 

    public interface Queue<E> { 
    int size(); 
    boolean isEmpty(); 
    void enqueue(); 
    E first(); 
    E dequeue(); 


} 

public class LinkedQueue<E> implements Queue<E> { 

    private SinglyLinkedList<E> list = new SinglyLinkedList<>(); 

    public LinkedQueue() { 
    } 

    public int size() { 
     return list.size(); 
    } 

    public boolean isEmpty() { 
     return list.isEmpty(); 
    } 

    public void enqueue(E element) { 
     list.addLast(element); 
    } 

    public E first() { 
     return list.first(); 
    } 

    public E dequeue() { 
     return list.removeFirst(); 
    } 

    @Override 
    public void enqueue() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools |list.addLast(element); 
    } 

    public void displayQueue() { 
     list.displayList(); 
     System.out.println(); 
    } 

public class Main { 



    public static void main(String[] args) { 

     LinkedQueue list = new LinkedQueue(); 

     list.enqueue(sam); 
     list.enqueue(adams); 
     list.enqueue(john); 
     list.enqueue(isac); 
     list.enqueue(gad); 
     System.out.print("\n Linked list before calling swapNodes() "); 
     list.displayQueue(); 

    }} 

キュー内でこれらの名前の順序を変更するにはどうすればよいですか? 私は、そのスワップノードをsinglylinkedlistクラスに入れようとしましたが、work.i mではリンクされたクラスまたはsinglylinkedlistクラスまたはメインクラスでこの関数を作成する必要があります。はい、私はちょうどそのようにキュー内の名前を入れ替えるだけです。Javaで単一のリンクリストキューの順序を変更するにはどうすればよいですか?

+4

、それがお役に立てば幸いです。失敗したコードのロジック部分とエラーを表示してください –

+2

あなたの目標は何ですか?確かにあなたは交換のために交換していません。 –

+0

あなたはhttp://www.geeksforgeeks.org/rearrange-a-given-linked-list-in-place/を見ることができます。ここでより良いアイデアを得ることができます。 – Akash

答えて

0

UPDATED ANSWER

私は理解しやすい方法であなたのNodeNodeListクラスを変更しました。私はまた、これらのクラスのために同様のプライベートな値と同様のメソッドを保持しました。

public class JavaApplication287 { 

    public static class Node{ 
     private Node node; 
     private Node nextNode; 
     int data; 

     Node(int d){ 
      data = d; 
      nextNode = null; 
     } 

     public Node getNode(){return node;} 
     public void setNode(Node someNode){node = someNode;} 

     public Node getNextNode(){return nextNode;} 
     public void setNextNode(Node someNextNode){nextNode = someNextNode;} 

     public int getData(){return data;} 
     public void setData(int d){data = d;} 

     public void printNode(){System.out.println(data);} 
    } 

    public static class NodeLinkedList{ 
     private Node head; 
     private Node tail; 
     private int size; 

     NodeLinkedList(Node nodeHead, Node nodeTail, int s){ 
      this.head = nodeHead; 
      this.tail = nodeTail; 
      this.size = s; 
     } 

     public Node getHead(){return head;} 
     public void setHead(Node n){head = n;} 

     public Node getTail(){return tail;} 
     public void setTail(Node n){tail = n;} 

     public int getSize(){return size;} 
     public void setSize(int n){size = n;} 

     public void printNodeList(){ 
      System.out.println("Head: " + head.getData()); 
      Node current = head; 
      while (current.nextNode != null){ 
       System.out.println(current.data); 
       current = current.getNextNode(); 
      } 
      System.out.println("Tail: " + tail.getData()); 
     } 
    } 

    public static void main(String[] args) { 

     // create Sample Nodes 
     Node zero = new Node(0); 
     Node one = new Node(1); 
     Node two = new Node(2); 
     Node three = new Node(3); 
     Node four = new Node(4); 
     Node five = new Node(5); 

     //Link Them 
     zero.setNextNode(one); 
     one.setNextNode(two); 
     two.setNextNode(three); 
     three.setNextNode(four); 
     four.setNextNode(five); 

     //Create the Linked Node List with head = one & tail = five 
     NodeLinkedList myNodeLinkedList = new NodeLinkedList(zero, five, 6); 

     //Print Current LinkedNodes 
     myNodeLinkedList.printNodeList(); 

     //Invert the NodeLinkedList 
     Node position = myNodeLinkedList.getHead(); //Node we look at 

     Node prev = null; // Store the prev Node 
     Node node = null; // Temp Node of the next Node in the Linked List 

     for (int i=0; i< myNodeLinkedList.getSize(); i++){      
      node = position.getNextNode(); //Store the Next Node so we do not lose access to it 

      position.setNextNode(prev); // Update current Node's NextNode value 
      prev = position; // Set previous Node as the Node we are currently looking at 
      position = node; // Move our position to the next Node 
     } 

     //Invert Head and Tail 
     Node temp = myNodeLinkedList.getHead(); 
     myNodeLinkedList.setHead(myNodeLinkedList.getTail()); 
     myNodeLinkedList.setTail(temp); 

     //Print Current LinkedNodes 
     myNodeLinkedList.printNodeList(); 
    } 
} 

これは、コードを作業し、ここで私が手に出力され、

run: 
Head: 0 
0 
1 
2 
3 
4 
Tail: 5 
Head: 5 
5 
4 
3 
2 
1 
Tail: 0 
BUILD SUCCESSFUL (total time: 0 seconds) 

は、単にコードのダンプをしないでください

+0

Javaで私のスキルレベルを初心者と見なすことができます。私は簡単なコードが必要です。 –

+0

mySinglyLinkedList(i).getNext()。setNext(mySinglyLinkedList(i));この行が何かを理解しなかったのは、コードの非常に良い部分である –

+0

でも、単純ですがパズルの一部を解決します。私はまだこのノードリンクされたリストを待ち行列インターフェースにリンクする必要があります。あなたがこのメインでやったことを{待ち行列とデキュー}のような待ち行列関数で行います。 –

関連する問題