Skip to content

Commit 9d96be0

Browse files
author
Antesh Sharma
committed
Odd position movoed to start and even at the end in SC: O(1)
1 parent 342cc8c commit 9d96be0

File tree

1 file changed

+56
-8
lines changed

1 file changed

+56
-8
lines changed

src/main/java/com/antesh/dsa/linkedlist/OddEvenLinkedList.java

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*/
2222

2323
public class OddEvenLinkedList {
24-
ListNode head;
24+
public ListNode head;
2525

2626
class ListNode {
2727
int data;
@@ -31,6 +31,18 @@ public ListNode(int data) {
3131
this.data = data;
3232
this.next = null;
3333
}
34+
35+
@Override
36+
public String toString() {
37+
StringBuilder sb = new StringBuilder();
38+
ListNode temp = head;
39+
while (temp!= null) {
40+
sb.append(temp.data).append(" --> ");
41+
temp = temp.next;
42+
}
43+
44+
return sb.toString();
45+
}
3446
}
3547

3648
public void addAtTail(int data) {
@@ -47,23 +59,59 @@ public void addAtTail(int data) {
4759
currentNode.next = newNode;
4860
}
4961

50-
public static ListNode oddEvenLinkedList(ListNode head) {
62+
public ListNode oddEvenLinkedList(ListNode head) {
5163
if (head == null) {
5264
return head;
5365
}
5466

5567
ListNode currentNode = head; //1 -> 2 -> 3 -> 4 -> 5
5668

57-
while (currentNode.next != null && currentNode.next.next != null) {
58-
ListNode nextNode = currentNode.next; // 2 -> 3
59-
ListNode nextToNextNode = currentNode.next.next; // 3 -> 4
60-
currentNode.next = currentNode.next.next; //1 -> 3 -> 4
61-
//TODO:
62-
69+
int size = 0;
70+
while (currentNode != null) {
71+
size++;
72+
currentNode = currentNode.next;
73+
}
6374

75+
currentNode = head;
76+
int counter = size / 2;
6477

78+
while (currentNode.next != null && currentNode.next.next != null && counter > 0) {
79+
int data = currentNode.next.data;
80+
currentNode.next = currentNode.next.next;
81+
addAtTail(data);
82+
currentNode = currentNode.next;
83+
counter--;
6584
}
6685

86+
return head;
87+
}
88+
89+
public static void main(String[] args) {
90+
//Odd length
91+
OddEvenLinkedList oddEvenLinkedList = new OddEvenLinkedList();
92+
oddEvenLinkedList.addAtTail(1);
93+
oddEvenLinkedList.addAtTail(2);
94+
oddEvenLinkedList.addAtTail(3);
95+
oddEvenLinkedList.addAtTail(4);
96+
oddEvenLinkedList.addAtTail(5);
97+
98+
99+
System.out.println("Original odd length linked list: " + oddEvenLinkedList.head);
100+
System.out.println("linked list after odd even position shuffling: " +oddEvenLinkedList.oddEvenLinkedList(oddEvenLinkedList.head));
101+
System.out.println();
102+
103+
//Even length
104+
oddEvenLinkedList = new OddEvenLinkedList();
105+
oddEvenLinkedList.addAtTail(1);
106+
oddEvenLinkedList.addAtTail(2);
107+
oddEvenLinkedList.addAtTail(3);
108+
oddEvenLinkedList.addAtTail(4);
109+
oddEvenLinkedList.addAtTail(5);
110+
oddEvenLinkedList.addAtTail(6);
111+
112+
System.out.println("Original even length linked list: " + oddEvenLinkedList.head);
113+
System.out.println("linked list after odd even position shuffling: " +oddEvenLinkedList.oddEvenLinkedList(oddEvenLinkedList.head));
114+
67115

68116
}
69117

0 commit comments

Comments
 (0)