public class ListNode { // struct public int val; // cell% field list-next public ListNode next; // cell% field list-val // end-struct list% ListNode(int v, ListNode l) { // : new-list { list1 val -- list2 } val = v; // list% %allot { list2 } next = l; // list1 list2 list-next ! } // val list2 list-val ! // list2 ; static void print(ListNode l) { // : .list ( list -- ) while (l != null) { // begin { l } System.out.print(l.val); // l while System.out.print(" "); // l list-val @ . l = l.next; // l list-next @ } // repeat ; System.out.println(); } static void almostInsertEnd(int v, // : insert-end { val listp -- } ListNode l) {// listp begin { lp1 } while (l.next != null) // lp1 @ while l=l.next; // lp1 @ list-next l.next = new ListNode(v, null); // repeat } // 0 val new-list lp1 ! ; static ListNode copy(ListNode l) { // : copy-node { list1 -- list2 } return new ListNode(l.val, l.next); // list1 list-next @ } // list1 list-val @ new-list ; public static void main(String [] args) { ListNode list1=new ListNode(5, null); // 0 5 new-list constant list1 ListNode list2=list1; // list1 constant list2 ListNode list3=new ListNode(5,null); // 0 5 new-list constant list3 print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list list1.val=6; // 6 list1 list-val ! System.out.println(); // cr print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list ListNode list4=new ListNode(8, list1); // list1 8 new-list constant list4 System.out.println(); // cr print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list print(list4); // cr list4 .list // cell% %allot constant listp1 // list4 listp1 ! almostInsertEnd(9, list4); // 9 listp1 insert-end System.out.println(); // cr print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list print(list4); // cr list4 .list ListNode list5=copy(list4); // list4 copy-node constant list5 System.out.println(); // cr print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list print(list4); // cr list4 .list print(list5); // cr list5 .list list5.val=2; // 2 list5 list-val ! System.out.println(); // cr print(list1); // cr list1 .list print(list2); // cr list2 .list print(list3); // cr list3 .list print(list4); // cr list4 .list print(list5); // cr list5 .list } // cr bye }