/media/sda-magnetic/david/Extern-Magnetic-2022-06-29/Extern01/Dokumente-2020-11-16/disk10-ab-2020-01-10/02-debian-pc2-work/informatik/java-src/java-2020-10-14/Ringpuffer.java


public class Ringpuffer {
    public static void main (String [] args) {
        int i;
        
        //try {
        
          /*  if (args.length < 1) {
                throw new Exception();
            }*/
            
        
            Buffer buf = new Buffer (args[0]);
        
            for (i = 1;  i < args.length;  i++)
                buf = buf.insert (args[i]);
                
            buf.print();
        //}
        /*catch (Exception e) {
            System.out.println ("You have not given the neccessary number of arguments");
        }*/
            
    }
    
    public static class Buffer {
        Buffer next;
        Buffer prev;
        String info;
        
        Buffer (String info) {
            this.next = null;
            this.prev = null;
            this.info = info;
        }
        
        public Buffer insert (String info) {
            Buffer ptr = this;
            Buffer prev_ptr = this;
            Buffer new_ptr = new Buffer (info);
    
            if (info.compareTo(ptr.info) < 0) {
                new_ptr.next = ptr;
                ptr.prev = new_ptr;
            }
            else {
                while (ptr != null) {
                    if (info.compareTo(ptr.info) > 0)
                        break;
                    prev_ptr = ptr;
                    ptr = ptr.next;
                }
                if (ptr == null) {
                    new_ptr.prev = prev_ptr;
                    prev_ptr.next = new_ptr;
                }
                else {
                    if (ptr.next != null) {
                        new_ptr.next = prev_ptr.next;
                        new_ptr.prev = prev_ptr;
                        new_ptr.next.prev = new_ptr;
                        new_ptr.prev.next = new_ptr;
                    }
                    else {
                        new_ptr.next = null;
                        new_ptr.prev = null;
                        prev_ptr.next = new_ptr;
                    }
                }
                return this;
            }
            return new_ptr;
            
        }
        public void print () {
            Buffer ptr = this;
            
            while (ptr != null) {
                System.out.println (ptr.info);
                ptr = ptr.next;
            }
        
        }
    }
}