Skip to content

Commit dbb95ae

Browse files
author
Antesh Sharma
committed
Design a LinkedList with set of supported operations
1 parent 7f13464 commit dbb95ae

File tree

1 file changed

+152
-0
lines changed

1 file changed

+152
-0
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package com.antesh.dsa.linkedlist;
2+
/* Reference: https://github.com/aniketskulkarni/coding-problems/blob/master/LeetCode/src/com/java7/problem/easy/linkedlist/DesignLinkedList.java
3+
* Design a linked list data structure with below supported operations
4+
* - addAtHead(int data)
5+
* - addAtTail(int data)
6+
* - addAtIndex(int data)
7+
* - get(int index)
8+
* - deleteAtIndex(int index)
9+
* */
10+
public class DesignLinkedList implements LinkedList {
11+
Node head;
12+
int size;
13+
14+
class Node {
15+
int data;
16+
Node next;
17+
18+
public Node(int data) {
19+
this.data = data;
20+
this.next = null;
21+
}
22+
}
23+
24+
public DesignLinkedList() {
25+
26+
}
27+
28+
@Override
29+
public void addAtHead(int data) {
30+
Node temp = new Node(data);
31+
temp.next = head;
32+
head = temp;
33+
size++;
34+
}
35+
36+
@Override
37+
public void addAtTail(int data) {
38+
Node temp = new Node(data);
39+
if (head == null) {
40+
head = temp;
41+
size++;
42+
return;
43+
}
44+
45+
Node ptr = head;
46+
while (ptr.next != null) {
47+
ptr = ptr.next;
48+
}
49+
50+
ptr.next = temp;
51+
size++;
52+
}
53+
54+
@Override
55+
public void addAtIndex(int data, int index) {
56+
if (index < 0 || index > size) {
57+
return;
58+
}
59+
60+
if (index == 0) {
61+
addAtHead(data);
62+
return;
63+
}
64+
65+
if (index == size) {
66+
addAtTail(data);
67+
return;
68+
}
69+
70+
Node newNode = new Node(data);
71+
Node currentNode = head;
72+
int currentIndex = 1;
73+
while (currentIndex < index) {
74+
currentNode = currentNode.next;
75+
currentIndex++;
76+
}
77+
78+
Node nextNode = currentNode.next;
79+
currentNode.next = newNode;
80+
newNode.next = nextNode;
81+
size++;
82+
}
83+
84+
@Override
85+
public int get(int index) {
86+
87+
if (size == 0 || index > size) {
88+
return -1;
89+
}
90+
91+
Node currentNode = head;
92+
int currentIndex = 0;
93+
94+
while (currentNode.next != null && currentIndex < index) {
95+
currentNode = currentNode.next;
96+
currentIndex++;
97+
}
98+
99+
return currentNode.data;
100+
}
101+
102+
@Override
103+
public int deleteAtIndex(int index) {
104+
if (size == 0 || index > size) {
105+
return -1;
106+
}
107+
108+
if (index == 0) {
109+
Node temp = head;
110+
head = head.next;
111+
size--;
112+
return temp.data;
113+
}
114+
115+
Node currentNode = head;
116+
int currentIndex = 0;
117+
while (currentIndex < index) {
118+
currentNode = currentNode.next;
119+
currentIndex++;
120+
}
121+
Node temp = currentNode;
122+
Node nextNode = currentNode.next.next;
123+
currentNode.next = nextNode;
124+
size--;
125+
126+
return temp.data;
127+
}
128+
129+
public static void main(String[] args) {
130+
DesignLinkedList linkedList = new DesignLinkedList();
131+
linkedList.addAtHead(1);
132+
linkedList.addAtTail(2);
133+
linkedList.addAtTail(3);
134+
linkedList.addAtHead(4);
135+
linkedList.deleteAtIndex(0);
136+
linkedList.addAtIndex(100, 2);
137+
138+
System.out.println(linkedList.get(0));
139+
System.out.println(linkedList.get(1));
140+
System.out.println(linkedList.get(2));
141+
System.out.println(linkedList.get(3));
142+
}
143+
144+
}
145+
146+
interface LinkedList {
147+
void addAtHead(int data);
148+
void addAtTail(int data);
149+
void addAtIndex(int data, int index);
150+
int get(int index);
151+
int deleteAtIndex(int index);
152+
}

0 commit comments

Comments
 (0)