File tree Expand file tree Collapse file tree
algorithms-miscellaneous-6/src
main/java/com/baeldung/algorithms/linkedlist
test/java/com/baeldung/algorithms/linkedlist Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ package com .baeldung .algorithms .linkedlist ;
2+
3+ public class LinkedListReversal {
4+
5+ ListNode reverseList (ListNode head ) {
6+ ListNode previous = null ;
7+ ListNode current = head ;
8+ while (current != null ) {
9+ ListNode nextElement = current .getNext ();
10+ current .setNext (previous );
11+ previous = current ;
12+ current = nextElement ;
13+ }
14+ return previous ;
15+ }
16+
17+ ListNode reverseListRecursive (ListNode head ) {
18+ if (head == null ) {
19+ return null ;
20+ }
21+ if (head .getNext () == null ) {
22+ return head ;
23+ }
24+ ListNode node = reverseListRecursive (head .getNext ());
25+ head .getNext ().setNext (head );
26+ head .setNext (null );
27+ return node ;
28+ }
29+
30+ }
Original file line number Diff line number Diff line change 1+ package com .baeldung .algorithms .linkedlist ;
2+
3+ public class ListNode {
4+
5+ private int data ;
6+ private ListNode next ;
7+
8+ ListNode (int data ) {
9+ this .data = data ;
10+ this .next = null ;
11+ }
12+
13+ public int getData () {
14+ return data ;
15+ }
16+
17+ public ListNode getNext () {
18+ return next ;
19+ }
20+
21+ public void setData (int data ) {
22+ this .data = data ;
23+ }
24+
25+ public void setNext (ListNode next ) {
26+ this .next = next ;
27+ }
28+ }
Original file line number Diff line number Diff line change 1+ package com .baeldung .algorithms .linkedlist ;
2+
3+ import org .junit .Test ;
4+
5+ import static org .junit .Assert .assertEquals ;
6+ import static org .junit .Assert .assertNotNull ;
7+
8+ public class LinkedListReversalUnitTest {
9+ @ Test
10+ public void givenLinkedList_whenIterativeReverse_thenOutputCorrectResult () {
11+ ListNode head = constructLinkedList ();
12+ ListNode node = head ;
13+ for (int i = 1 ; i <= 5 ; i ++) {
14+ assertNotNull (node );
15+ assertEquals (i , node .getData ());
16+ node = node .getNext ();
17+ }
18+ LinkedListReversal reversal = new LinkedListReversal ();
19+ node = reversal .reverseList (head );
20+ for (int i = 5 ; i >= 1 ; i --) {
21+ assertNotNull (node );
22+ assertEquals (i , node .getData ());
23+ node = node .getNext ();
24+ }
25+ }
26+
27+ @ Test
28+ public void givenLinkedList_whenRecursiveReverse_thenOutputCorrectResult () {
29+ ListNode head = constructLinkedList ();
30+ ListNode node = head ;
31+ for (int i = 1 ; i <= 5 ; i ++) {
32+ assertNotNull (node );
33+ assertEquals (i , node .getData ());
34+ node = node .getNext ();
35+ }
36+ LinkedListReversal reversal = new LinkedListReversal ();
37+ node = reversal .reverseListRecursive (head );
38+ for (int i = 5 ; i >= 1 ; i --) {
39+ assertNotNull (node );
40+ assertEquals (i , node .getData ());
41+ node = node .getNext ();
42+ }
43+ }
44+
45+ private ListNode constructLinkedList () {
46+ ListNode head = null ;
47+ ListNode tail = null ;
48+ for (int i = 1 ; i <= 5 ; i ++) {
49+ ListNode node = new ListNode (i );
50+ if (head == null ) {
51+ head = node ;
52+ } else {
53+ tail .setNext (node );
54+ }
55+ tail = node ;
56+ }
57+ return head ;
58+ }
59+ }
You can’t perform that action at this time.
0 commit comments