//compiler options: /t:library using System; public class List { public T info; public List next; public List(T n, List nxt) { info = n; next = nxt; } public static void Write(List p) { if(p == null) { Console.WriteLine("null"); } else { do { Console.WriteLine(p.info); p = p.next; } while(p != null); } } public static int Length(List p) { int br = 0; while(p != null) { br++; p = p.next; } return br; } public static List FromArray(T[] a) { int n = a.Length; if(n == 0) { return null; } List p = null; for(int i = n - 1; i >= 0; i--) { p = new List(a[i], p); } return p; } public static bool Equal(List p, List q) { while(p != null && q != null) { if(!Object.Equals(p.info, q.info)) { break; } p = p.next; q = q.next; } return p == null && q == null; } public static List Copy(List p) { if(p == null) { return null; } List first = new List(p.info, null); List last = first; p = p.next; while(p != null) { last.next = new List(p.info, null); last = last.next; p = p.next; } return first; } public static T[] ArrayFrom(List p) { // zahtevamo da je lista p neprazna int n = Length(p); T[] a = new T[n]; for(int i = 0; i < n; i++) { a[i] = p.info; p = p.next; } return a; } public static List Rev(List p) { if(p == null || p.next == null) { return p; } List q = p.next; p.next = null; List r; do { r = p; p = q; q = q.next; p.next = r; } while(q != null); return p; } }