---------------------------------------------------------------- Programs/list_append/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List a; ) { print( "{ " ); while ( a != null ) { print( a.value ); a = a.next; if ( a != null ) print( ", " ); } print( " }" ); } void appendList( var List a; int data; ) { List b; if ( a == null ) a = new List { data, null }; else { for ( b = a; b.next != null; b = b.next ) { } b.next = new List { data, null }; } } List createList( []int data; ) { List a = null; for ( int i = 0; i < size data; i++ ) appendList( a, data[ i ] ); return a; } []int a = new []int { 1, 2, 4, 8, 16, 32 }; for ( int i = 0; i < size a; i++ ) println( a[ i ] ); List b = createList( a ); printList( b ); println( "" ); ---------------------------------------------------------------- Programs/list_concat_copy/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); } println( " }" ); } void concatList( int level; List source1, source2; var List dest; ) { if ( source1 == null ) { dest = source2; // At this point } else { dest = new List{ source1.value, null }; concatList( level + 1, source1.next, source2, dest.next ); // Inside the above invocation } } List source1, source2, a2, a4, a7, a9, dest; a9 = new List{ 9, null }; a7 = new List{ 7, a9 }; a4 = new List{ 4, null }; a2 = new List{ 2, a4 }; source1 = a7; source2 = a2; concatList( 0, source1, source2, dest ); // Inside this invocation printList( source1 ); printList( source2 ); printList( dest ); ---------------------------------------------------------------- Programs/list_delete/program.in ---------------------------------------------------------------- class List ( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); }; println( " }" ); }; void createNode( int level; var List dest; int value; List next; ) { dest = new List{ value, next }; }; void deleteNode( int level; List source; var List dest; int value; ) { if ( source == null || value < source.value ) { dest = source; } else if ( value == source.value ) { dest = source.next; // Show state at this point } else { createNode( level + 1, dest, source.value, null ); deleteNode( level + 1, source.next, dest.next, value ); // Inside the above invocation } }; List source, a2, a4, a6, a8, a10, dest; a10 = new List{ 10, null }; a8 = new List{ 8, a10 }; a6 = new List{ 6, a8 }; a4 = new List{ 4, a6 }; a2 = new List{ 2, a4 }; source = a2; deleteNode( 0, source, dest, 6 ); // Inside this invocation printList( source ); printList( dest ); ---------------------------------------------------------------- Programs/list_deleteAll/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); } println( " }" ); } void deleteAll( int level; int value; List source; var List dest; ) { if ( source == null ) { dest = null; } else if ( source.value == value ) { deleteAll( level + 1, value, source.next, dest ); } else { dest = new List{ source.value, null }; deleteAll( level + 1, value, source.next, dest.next ); } } List source, a1, a2a, a4, a7, a2b, a9, dest; a9 = new List{ 9, null }; a2b = new List{ 2, a9 }; a7 = new List{ 7, a2b }; a4 = new List{ 4, a7 }; a2a = new List{ 2, a4 }; a1 = new List{ 1, a2a }; source = a1; deleteAll( 0, 2, source, dest ); // Inside this invocation printList( source ); printList( dest ); ---------------------------------------------------------------- Programs/list_head/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); } print( " }" ); } void head( int n; List source; var List dest; ) { print( "Enter head( " + n + ", " ); printList( source ); print( ", " ); printList( dest ); println( " )" ); if ( n == 0 ) { dest = null; // At this point } else { dest = new List{ source.value, null }; print( "dest = " ); printList( dest ); println( "" ); head( n - 1, source.next, dest.next ); // Inside the above invocation } print( "Exit head( " + n + ", " ); printList( source ); print( ", " ); printList( dest ); println( " )" ); } List source, a2, a4, a7, a9, dest; a9 = new List{ 9, null }; a7 = new List{ 7, a9 }; a4 = new List{ 4, a7 }; a2 = new List{ 2, a4 }; source = a2; head( 2, source, dest ); // Inside this invocation printList( source ); println( "" ); printList( dest ); println( "" ); ---------------------------------------------------------------- Programs/list_insert_copy/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); } println( " }" ); } void createNode( int level; var List dest; int value; List next; ) { dest = new List{ value, next }; // Show state at this point } void insertList( int level; List source; var List dest; int value; ) { if ( source == null || value <= source.value ) { createNode( level + 1, dest, value, source ); // Inside the above invocation } else { createNode( level + 1, dest, source.value, null ); insertList( level + 1, source.next, dest.next, value ); // Inside the above invocation } } List source, a2, a4, a7, a9, dest; a9 = new List{ 9, null }; a7 = new List{ 7, a9 }; a4 = new List{ 4, a7 }; a2 = new List{ 2, a4 }; source = a2; insertList( 0, source, dest, 5 ); // Inside this invocation printList( source ); printList( dest ); ---------------------------------------------------------------- Programs/list_insert_modify/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List a; ) { print( "{ " ); while ( a != null ) { print( a.value ); a = a.next; if ( a != null ) print( ", " ); } print( " }" ); } void appendHead( var List a; int data; ) { a = new List{ data, a }; } void insertList( var List a; int data; ) { if ( a == null || data <= a.value ) appendHead( a, data ); else insertList( a.next, data ); } List a5 = new List{ 5, null }; List a3 = new List{ 3, a5 }; List a1 = new List{ 1, a3 }; List a = a1; insertList( a, 4 ); printList( a ); println( "" ); ---------------------------------------------------------------- Programs/list_reprint1/program.in ---------------------------------------------------------------- class List( int value; List next; ); void appendText( var []char result; []char text; ) { result = result + text; } void buildListText( List a; var []char result; ) { if ( a != null ) { appendText( result, a.value ); if ( a.next != null ) { appendText( result, ", " ); buildListText( a.next, result ); } } } List a5 = new List{ 5, null }; List a3 = new List{ 3, a5 }; List a1 = new List{ 1, a3 }; List a = a1; []char result = "{ "; buildListText( a, result ); appendText( result, " }" ); println( result ); ---------------------------------------------------------------- Programs/list_reprint2/program.in ---------------------------------------------------------------- class List( int value; List next; ); void buildListText( List a; var []char result; ) { []char result1; if ( a != null ) { if ( a.next == null ) result = "" + a.value; else { buildListText( a.next, result1 ); result = a.value + ", " + result1; } } } List a5 = new List{ 5, null }; List a3 = new List{ 3, a5 }; List a1 = new List{ 1, a3 }; List a = a1; []char result; buildListText( a, result ); println( "{" + result + "}" ); ---------------------------------------------------------------- Programs/list_reverse/program.in ---------------------------------------------------------------- class List( int value; List next; ); void printList( List source; ) { print( "{ " ); while ( source != null ) { print( source.value ); source = source.next; if ( source != null ) print( ", " ); } println( " }" ); } void reverseTransferList( int level; List source; var List dest; ) { if ( source == null ) { // At this point } else { dest = new List{ source.value, dest }; reverseTransferList( level + 1, source.next, dest ); // Inside the above invocation } } List source, a2, a4, a7, a9, dest; a9 = new List{ 9, null }; a7 = new List{ 7, a9 }; a4 = new List{ 4, a7 }; a2 = new List{ 2, a4 }; source = a2; reverseTransferList( 0, source, dest ); // Inside this invocation printList( source ); printList( dest );