Вы находитесь на странице: 1из 10

class Node { Object data; Node prev; Node next;

public Node( Object data ) { this.data = data; } public Node( Object data, Node prev, Node next ) { this.data = data; this.prev = prev; this.next = next; }
}


public class CircularDoublyLinkedList {
Node entryNode;

/** * Dodavanje na jazel na kruzna dvojo-povrzana lista ako listata e prazna */ public void add( Object data ) {
if( entryNode == null ) { entryNode = new Node( data );

entryNode.prev = entryNode; entryNode.next = entryNode;

} else {
// Dodavanje na jazel ako nizata ne e prazna

newNode = new Node( data, entryNode, entryNode.next ); entryNode.next = newNode;


// Povrzi go noviot jazel so ostanatite.

if( entryNode.prev == entryNode ) {


// ako postoi samo eden jazel

entryNode.prev = entryNode.next=newNode; } else {


// ako postojat barem dva jazla

entryNode.next.prev = newNode; } } }

public void remove( Object data ) {

if( entryNode != null ) { Node itr = entryNode; do { if( itr.data.equals( data ) ) { itr.prev.next = itr.next; itr.next.prev = itr.prev; if( itr.next == itr ) { entryNode = null; } else if( itr == entryNode ) { entryNode = itr.next; } return; } itr = itr.next; } while( itr != entryNode ); }
}

Funkcija koja go vrakja prvoto pojavuvanje na daden jazel


public Node get( Object data ) { if( entryNode != null ) { Node itr = entryNode; do { if( itr.data.equals( data ) ) { return itr; } itr = itr.next; } while( itr != entryNode ); } return null; }

public void sosedSwap(Node a){

// gi menva mestata na dva sosedni elementi a i a.next


Node b; b=a.next; if (b==a) return; a.prev.next=b; b.prev=a.prev; a.next=b.next; b.next.prev=a; b.next=a; a.prev=b; }

public void iterateForwards( ) {

if( entryNode != null ) {


Node itr = entryNode;

do {
System.out.print( itr.data + " " ); itr = itr.next; } while( itr != entryNode ); System.out.println( ); }

public void iterateBackwards( ) {


if( entryNode != null ) { Node itr = entryNode; do { System.out.print( itr.data + " " ); itr = itr.prev; } while( itr != entryNode );

System.out.println( );
} }

public static void main( String[ ] args ) {


CircularDoublyLinkedList list = new CircularDoublyLinkedList( ); for( int i = 1; i <= 6; i++ ) { list.add( i ); } // Prints: 1 6 5 4 3 2 // list.iterateForwards( ); // Prints: 1 2 3 4 5 6 list.iterateBackwards( ); // Remove nodes 3, 2, 1 from the circular list. for( int i = 1; i <= 3; i++ ) { list.remove( list.get( i ).data ); } // Prints: 6 5 4 list.iterateForwards( ); } }

Вам также может понравиться