LinkedList Implementation

REF.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
public class LinkedListImpl {

class Node {
int val;
Node next;

public Node(int val) {
this.val = val;
}
}

Node head = null, tail = null;

/*
* Adds node at the end of the current list
*/
public void addNode(int val) {
if (head == null) {
Node temp = new Node(val);
head = temp;
tail = temp;
} else {
tail.next = new Node(val);
tail = tail.next;
}
}

/*
* Adds node at the start of the current list
*/
public void addNodeAtStart(int val) {
if (head == null) {
Node temp = new Node(val);
head = temp;
tail = temp;
} else {
Node temp = new Node(val);
temp.next = head;
head = temp;
}
}

/*
* Adds node at the certain index.
*/
public void addNodeAtCertainIndex(int val, int index) {
Node temp = head;
int count = 0;
while (temp != null && ++count != index)
temp = temp.next;
Node node = new Node(val);
node.next = temp.next;
temp.next = node;
}

/*
* Removes the last node in the given list and updates tail node
*/
public void removeNode() {
Node temp = head;
while (temp.next != null && temp.next.next != null) {
temp = temp.next;
}
temp.next = null;
tail = temp;
}

/*
* Removes the first node in the given list and updates head node
*
*/
public void removeNodeAtStart() {
// The first node would become zombie and should be garbage collected after the
// below operation
head = head.next;
}

/*
* Removes the node at the given index in the given list and updates head node
*
*/
public void removeNodeAtCertainIndex(int index) {
Node temp = head;
int count = 0;
while (temp != null && ++count != index)
temp = temp.next;
temp.val = temp.next.val;
temp.next = temp.next.next;
}

/*
* Checks if a node with the given value exist in the list, returns true or
* false. Alternatively you can return the index too.
*/
public boolean search(int target) {
Node temp = head;
while (temp != null) {
if (temp.val == target) return true;
temp=temp.next;
}
return false;

}

/*
* Checks if a node with the given value exist in the list, returns the index of
* the given value in the list.
*/
public int searchAndReturnIndex(int target) {
Node temp = head;
int count = 0;
while (temp != null) {
count++;
if (temp.val == target) return count;
temp=temp.next;
}
return -1;
}

/*
* Prints the current list
*/

public void printLinkedList() {
System.out.println();
Node temp = head;
while (temp != null) {
System.out.print(" " + temp.val);
temp = temp.next;
}
}

}

0%