11package class02 ;
22
33import java .util .ArrayList ;
4+ import java .util .List ;
45
56public class Code01_ReverseList {
67
@@ -87,6 +88,7 @@ public static DoubleNode testReverseDoubleList(DoubleNode head) {
8788return list .get (N - 1 );
8889}
8990
91+ // for test
9092public static Node generateRandomLinkedList (int len , int value ) {
9193int size = (int ) (Math .random () * (len + 1 ));
9294if (size == 0 ) {
@@ -104,6 +106,7 @@ public static Node generateRandomLinkedList(int len, int value) {
104106return head ;
105107}
106108
109+ // for test
107110public static DoubleNode generateRandomDoubleList (int len , int value ) {
108111int size = (int ) (Math .random () * (len + 1 ));
109112if (size == 0 ) {
@@ -122,77 +125,94 @@ public static DoubleNode generateRandomDoubleList(int len, int value) {
122125return head ;
123126}
124127
125- // 要求无环,有环别用这个函数
126- public static boolean checkLinkedListEqual (Node head1 , Node head2 ) {
127- while (head1 != null && head2 != null ) {
128- if (head1 .value != head2 .value ) {
128+ // for test
129+ public static List <Integer > getLinkedListOriginOrder (Node head ) {
130+ List <Integer > ans = new ArrayList <>();
131+ while (head != null ) {
132+ ans .add (head .value );
133+ head = head .next ;
134+ }
135+ return ans ;
136+ }
137+
138+ // for test
139+ public static boolean checkLinkedListReverse (List <Integer > origin , Node head ) {
140+ for (int i = origin .size () - 1 ; i >= 0 ; i --) {
141+ if (!origin .get (i ).equals (head .value )) {
129142return false ;
130143}
131- head1 = head1 .next ;
132- head2 = head2 .next ;
144+ head = head .next ;
133145}
134- return head1 == null && head2 == null ;
146+ return true ;
135147}
136148
137- // 要求无环,有环别用这个函数
138- public static boolean checkDoubleListEqual (DoubleNode head1 , DoubleNode head2 ) {
139- boolean null1 = head1 == null ;
140- boolean null2 = head2 == null ;
141- if (null1 && null2 ) {
142- return true ;
143- }
144- if (null1 ^ null2 ) {
145- return false ;
146- }
147- if (head1 .last != null || head2 .last != null ) {
148- return false ;
149+ // for test
150+ public static List <Integer > getDoubleListOriginOrder (DoubleNode head ) {
151+ List <Integer > ans = new ArrayList <>();
152+ while (head != null ) {
153+ ans .add (head .value );
154+ head = head .next ;
149155}
150- DoubleNode end1 = null ;
151- DoubleNode end2 = null ;
152- while (head1 != null && head2 != null ) {
153- if (head1 .value != head2 .value ) {
156+ return ans ;
157+ }
158+
159+ // for test
160+ public static boolean checkDoubleListReverse (List <Integer > origin , DoubleNode head ) {
161+ DoubleNode end = null ;
162+ for (int i = origin .size () - 1 ; i >= 0 ; i --) {
163+ if (!origin .get (i ).equals (head .value )) {
154164return false ;
155165}
156- end1 = head1 ;
157- end2 = head2 ;
158- head1 = head1 .next ;
159- head2 = head2 .next ;
160- }
161- if (head1 != null || head2 != null ) {
162- return false ;
166+ end = head ;
167+ head = head .next ;
163168}
164- while ( end1 != null && end2 != null ) {
165- if (end1 . value != end2 . value ) {
169+ for ( int i = 0 ; i < origin . size (); i ++ ) {
170+ if (! origin . get ( i ). equals ( end . value ) ) {
166171return false ;
167172}
168- end1 = end1 .last ;
169- end2 = end2 .last ;
173+ end = end .last ;
170174}
171- return end1 == null && end2 == null ;
175+ return true ;
172176}
173177
178+ // for test
174179public static void main (String [] args ) {
175180int len = 50 ;
176181int value = 100 ;
177182int testTime = 100000 ;
183+ System .out .println ("test begin!" );
178184for (int i = 0 ; i < testTime ; i ++) {
179185Node node1 = generateRandomLinkedList (len , value );
180- Node reverse1 = reverseLinkedList (node1 );
181- Node back1 = testReverseLinkedList (reverse1 );
182- if (!checkLinkedListEqual (node1 , back1 )) {
183- System .out .println ("oops!" );
184- break ;
186+ List <Integer > list1 = getLinkedListOriginOrder (node1 );
187+ node1 = reverseLinkedList (node1 );
188+ if (!checkLinkedListReverse (list1 , node1 )) {
189+ System .out .println ("Oops1!" );
190+ }
191+
192+ Node node2 = generateRandomLinkedList (len , value );
193+ List <Integer > list2 = getLinkedListOriginOrder (node2 );
194+ node2 = testReverseLinkedList (node2 );
195+ if (!checkLinkedListReverse (list2 , node2 )) {
196+ System .out .println ("Oops2!" );
185197}
186- DoubleNode node2 = generateRandomDoubleList ( len , value );
187- DoubleNode reverse2 = reverseDoubleList ( node2 );
188- DoubleNode back2 = testReverseDoubleList ( reverse2 );
189- if (! checkDoubleListEqual ( node2 , back2 )) {
190- System . out . println ( "oops!" );
191- break ;
198+
199+ DoubleNode node3 = generateRandomDoubleList ( len , value );
200+ List < Integer > list3 = getDoubleListOriginOrder ( node3 );
201+ node3 = reverseDoubleList ( node3 );
202+ if (! checkDoubleListReverse ( list3 , node3 )) {
203+ System . out . println ( "Oops3!" ) ;
192204}
205+
206+ DoubleNode node4 = generateRandomDoubleList (len , value );
207+ List <Integer > list4 = getDoubleListOriginOrder (node4 );
208+ node4 = reverseDoubleList (node4 );
209+ if (!checkDoubleListReverse (list4 , node4 )) {
210+ System .out .println ("Oops4!" );
211+ }
212+
193213}
194- System .out .println ("finish!" );
214+ System .out .println ("test finish!" );
195215
196216}
197217
198- }
218+ }
0 commit comments