Skip to content

Commit bd35793

Browse files
author
Bhrigu Kansra
authored
Merge branch 'master' into master
2 parents 971cbb5 + 75e6cdc commit bd35793

File tree

10 files changed

+651
-2
lines changed

10 files changed

+651
-2
lines changed

Data Structures/FenwickTree.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package segmentTrees;
2+
3+
public class FenwickTree {
4+
5+
int[] farr;
6+
public FenwickTree(int[] arr){
7+
farr=new int[arr.length+1];
8+
for(int i=0;i<arr.length;i++)
9+
{
10+
update(i,arr[i]);
11+
}
12+
13+
}
14+
15+
public int getSum(int l,int r){
16+
int sumj=getPrefixSum(r);
17+
int sumni=getPrefixSum(l-1);
18+
return sumj-sumni;
19+
}
20+
public void update(int idx,int delta){
21+
idx++;
22+
while(idx<farr.length){
23+
farr[idx]+=delta;
24+
idx+=getLastSetBit(idx);//To get to those who get impacted
25+
}
26+
}
27+
private int getLastSetBit(int a){
28+
return a&-a;
29+
}
30+
private int getPrefixSum(int idx){
31+
int sum=0;idx++;
32+
while(idx!=0){
33+
sum+=farr[idx];
34+
idx-=getLastSetBit(idx);//To get to parent
35+
}
36+
return sum;
37+
}
38+
39+
}

Data Structures/LinkedList.java

Lines changed: 312 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
2+
public class LinkedList {
3+
private class Node {
4+
int data;
5+
Node next;
6+
7+
}
8+
9+
private Node head;
10+
private Node tail;
11+
private int size;
12+
13+
int size() {
14+
return size;
15+
16+
}
17+
18+
boolean isEmpty() {
19+
return size == 0;
20+
21+
}
22+
23+
void display() {
24+
for (Node temp = head; temp != null; temp = temp.next) {
25+
System.out.print(temp.data + " ");
26+
}
27+
System.out.println();
28+
}
29+
30+
void addFirst(int value) {
31+
if (size == 0) {
32+
handleZSize(value);
33+
return;
34+
}
35+
Node temp = new Node();
36+
temp.data = value;
37+
temp.next = head;
38+
this.head = temp;
39+
size++;
40+
41+
}
42+
43+
void addLast(int value) {
44+
if (size == 0) {
45+
handleZSize(value);
46+
return;
47+
}
48+
Node temp = new Node();
49+
temp.data = value;
50+
this.tail.next = temp;
51+
this.tail = temp;
52+
size++;
53+
}
54+
55+
void handleZSize(int value) {
56+
Node temp = new Node();
57+
temp.data = value;
58+
head = temp;
59+
tail = temp;
60+
size++;
61+
// temp.data=value;
62+
}
63+
64+
int getFirst() {
65+
// Node temp=head;
66+
return head.data;
67+
}
68+
69+
int getLast() {
70+
// Node temp=tail;
71+
return tail.data;
72+
}
73+
74+
int getAt(int idx) {
75+
if (size < 0 || idx >= size) {
76+
System.out.println("Index Out Of Bounds");
77+
return -1;
78+
}
79+
Node temp = head;
80+
for (int i = 0; i < idx; i++) {
81+
temp = temp.next;
82+
}
83+
return temp.data;
84+
}
85+
86+
private Node getNodeAt(int idx) {
87+
if (size < 0 || idx >= size) {
88+
System.out.println("Index Out Of Bounds");
89+
return null;
90+
}
91+
Node temp = head;
92+
for (int i = 0; i < idx; i++) {
93+
temp = temp.next;
94+
}
95+
return temp;
96+
}
97+
98+
void addAt(int value, int idx) {
99+
if (idx < 0 || idx >= size) {
100+
System.out.println("out of bound");
101+
return;
102+
}
103+
if (idx == 0)
104+
addFirst(value);
105+
else if (idx == size)
106+
addLast(value);
107+
else {
108+
Node temp = new Node();
109+
temp.data = value;
110+
Node im1 = getNodeAt(idx - 1);
111+
temp.next = im1.next;
112+
im1.next = temp;
113+
}
114+
}
115+
116+
int removeFirst() {
117+
118+
if (size == 0) {
119+
System.out.println("Underflow");
120+
return -1;
121+
} else if (size == 1) {
122+
return handleSizeOneRemoval();
123+
124+
} else {
125+
Node temp = head;
126+
Node ip1 = temp.next;
127+
head = ip1;
128+
return temp.data;
129+
}
130+
}
131+
132+
int removeLast() {
133+
if (size == 0) {
134+
System.out.println("Underflow");
135+
return -1;
136+
} else if (size == 1) {
137+
return handleSizeOneRemoval();
138+
139+
} else {
140+
Node temp = tail;
141+
Node im1 = getNodeAt(size - 2);
142+
tail = im1;
143+
return temp.data;
144+
}
145+
}
146+
147+
int removeAt(int idx) {
148+
if (size < 0 || idx >= size) {
149+
System.out.println("Index Out Of Bounds");
150+
return -1;
151+
} else if (size == 0) {
152+
System.out.println("Underflow");
153+
return -1;
154+
} else if (size == 1) {
155+
return handleSizeOneRemoval();
156+
157+
} else {
158+
Node im1 = getNodeAt(idx - 1);
159+
Node i = im1.next;
160+
Node ip1 = i.next;
161+
im1.next = ip1;
162+
// i.next=null;
163+
// This line is not required in java but is in c++.
164+
// This due to garbage collection algo of java called mark and sweep
165+
return i.data;
166+
167+
}
168+
169+
}
170+
171+
private int handleSizeOneRemoval() {
172+
int temp = head.data;
173+
head = tail = null;
174+
size = 0;
175+
return temp;
176+
}
177+
178+
public void reverseDataIteratively() {
179+
for (int i = 0; i < size / 2; i++) {
180+
Node f = getNodeAt(i);
181+
Node s = getNodeAt(size - 1 - i);
182+
int tem = f.data;
183+
f.data = s.data;
184+
s.data = tem;
185+
}
186+
}
187+
188+
public void reversePointerIterative() {
189+
190+
Node prev = null;
191+
Node curr = head;
192+
while (curr != null) {
193+
Node ocnext = curr.next;
194+
curr.next = prev;
195+
prev = curr;
196+
curr = ocnext;
197+
198+
}
199+
Node t = head;
200+
head = tail;
201+
tail = t;
202+
203+
}
204+
205+
public void displayReverse() {
206+
recurseRev(head);
207+
208+
}
209+
210+
private void recurseRev(Node curr) {
211+
if (curr == null)
212+
return;
213+
recurseRev(curr.next);
214+
System.out.print(curr.data + " ");
215+
216+
}
217+
218+
public void reversePointerrecursive() {
219+
reversePointerRecursive(head);
220+
Node tem = head;
221+
head = tail;
222+
tail = tem;
223+
tail.next = null;
224+
}
225+
226+
private void reversePointerRecursive(Node curr) {
227+
if (curr.next == null)
228+
return;
229+
reversePointerRecursive(curr.next);
230+
curr.next.next = curr;
231+
232+
}
233+
234+
public void reverseDataRecursivly() {
235+
236+
heapMover left = new heapMover();
237+
left.node = this.head;
238+
reverseDataRecursivly(left, head, 0);
239+
}
240+
241+
private class heapMover {
242+
Node node;
243+
}
244+
245+
private void reverseDataRecursivly(heapMover left, Node right, int counter) {
246+
if (right == null)
247+
return;
248+
reverseDataRecursivly(left, right.next, counter + 1);
249+
if (counter >= size / 2) {
250+
251+
int t = left.node.data;
252+
left.node.data = right.data;
253+
right.data = t;
254+
left.node = left.node.next;
255+
256+
}
257+
}
258+
259+
public void fold() {
260+
heapMover left = new heapMover();
261+
left.node = this.head;
262+
fold(left, head, 0);
263+
}
264+
265+
private void fold(heapMover left, Node right, int counter) {
266+
if (right == null)
267+
return;
268+
fold(left, right.next, counter + 1);
269+
if (counter > size / 2) {
270+
271+
Node ocnext = left.node.next;
272+
left.node.next = right;
273+
right.next = ocnext;
274+
left.node = ocnext;
275+
276+
} else if (counter == size / 2) {
277+
tail = right;
278+
tail.next = null;
279+
}
280+
}
281+
public boolean isPalindrome(){
282+
heapMover left = new heapMover();
283+
left.node = this.head;
284+
return isPalindrome(left, head, 0);
285+
}
286+
private boolean isPalindrome(heapMover left, Node right, int counter){
287+
if (right == null)
288+
return true;
289+
boolean f=isPalindrome(left, right.next, counter + 1);
290+
if (counter >= size / 2) {
291+
292+
//int t = left.node.data;
293+
if(left.node.data != right.data)
294+
{left.node = left.node.next;return f=false;}
295+
left.node = left.node.next;
296+
297+
}
298+
return f;
299+
}
300+
public int mid(){
301+
Node slow=head;Node fast=head;
302+
303+
while(fast!=null&&fast.next!=null)
304+
{
305+
slow=slow.next;
306+
fast=fast.next.next;
307+
308+
}
309+
return slow.data;
310+
}
311+
312+
}

0 commit comments

Comments
 (0)