chore(Java): add fold-linked-list (#266)
parent
56a12bc250
commit
194316cb60
|
@ -18,6 +18,7 @@
|
||||||
3. [Doubly](linked-lists/doubly.java)
|
3. [Doubly](linked-lists/doubly.java)
|
||||||
4. [Reverse](linked-lists/reverse.java)
|
4. [Reverse](linked-lists/reverse.java)
|
||||||
5. [Singly](linked-lists/singly.java)
|
5. [Singly](linked-lists/singly.java)
|
||||||
|
6. [Fold Linked List](linked-lists/fold-linked-list.java)
|
||||||
|
|
||||||
## Queues
|
## Queues
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
// Java implementation for folding a linked list
|
||||||
|
public static class Node {
|
||||||
|
int data;
|
||||||
|
Node next;
|
||||||
|
public Node(int data){
|
||||||
|
this.data = data;
|
||||||
|
this.next = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class LinkedList {
|
||||||
|
Node head;
|
||||||
|
Node tail;
|
||||||
|
int size;
|
||||||
|
|
||||||
|
public void display() {
|
||||||
|
for (Node temp = head; temp != null; temp = temp.next) {
|
||||||
|
System.out.print(temp.data + " ");
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFirst(int val) {
|
||||||
|
Node temp = new Node(val);
|
||||||
|
temp.next = head;
|
||||||
|
head = temp;
|
||||||
|
if (size == 0) {
|
||||||
|
tail = temp;
|
||||||
|
}
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addLast(int val) {
|
||||||
|
Node temp = new Node(val);
|
||||||
|
temp.next = null;
|
||||||
|
if (size == 0) {
|
||||||
|
head = tail = temp;
|
||||||
|
} else {
|
||||||
|
tail.next = temp;
|
||||||
|
tail = temp;
|
||||||
|
}
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Node fleft;
|
||||||
|
private void foldhelper(Node right , int floor){
|
||||||
|
if(right == null){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foldhelper(right.next , floor+1);
|
||||||
|
if(floor>size/2){
|
||||||
|
Node val = fleft.next;
|
||||||
|
fleft.next = right;
|
||||||
|
right.next = val;
|
||||||
|
fleft = val;
|
||||||
|
}
|
||||||
|
else if(floor==size/2){
|
||||||
|
this.tail = right;
|
||||||
|
tail.next = null;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void fold() {
|
||||||
|
fleft = this.head;
|
||||||
|
foldhelper(this.head, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Driver Code
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
LinkedList ll = new LinkedList();
|
||||||
|
int n = 6;
|
||||||
|
for (int i = 1; i <= n; i++) {
|
||||||
|
ll.addLast(i);
|
||||||
|
}
|
||||||
|
// LinkedList --> [1,2,3,4,5,6] for n = 6
|
||||||
|
|
||||||
|
System.out.print("Linked List before folding --> ");
|
||||||
|
ll.display();
|
||||||
|
ll.fold();
|
||||||
|
System.out.print("Linked List after folding --> ");
|
||||||
|
ll.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Output:-
|
||||||
|
Linked List before folding --> 1 2 3 4 5 6
|
||||||
|
Linked List after folding --> 1 6 2 5 3 4
|
||||||
|
*/
|
Loading…
Reference in New Issue