Skip to content

Commit 431bbfe

Browse files
solution added
1 parent ec81ad6 commit 431bbfe

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

Linked List/RemoveKthNodeFromEnd.java

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
//Problem Number : 19 - Leetcode
2+
3+
/**
4+
* Definition for singly-linked list.
5+
* public class ListNode {
6+
* int val;
7+
* ListNode next;
8+
* ListNode() {}
9+
* ListNode(int val) { this.val = val; }
10+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
11+
* }
12+
*/
13+
14+
/*
15+
* Problem Description :
16+
* Given the head of a linked list, remove the nth node
17+
* from the end of the list and return its head.
18+
*
19+
* linkedlist = 1 -> 2 -> 3 -> 4 -> 5-> null
20+
* n = 2
21+
*/
22+
23+
/*
24+
* Approach we follow to solve this Problem.
25+
* Given : head of linkedlist and n = number of node to remove from end
26+
* Solution :
27+
* => Since we have to remove node from end , we need to calculate length of
28+
* linkedlist.
29+
* To do so lets create a function calcLength() , it take head node as parameter
30+
* and return length of linked list .
31+
* => Store the length of linkedlist in variable namely (len) by calling
32+
* function calcLength().
33+
* => To make it simple , lets calculate position of node from start of
34+
* linkedlist by subtracting length of node with nth node to remove.
35+
* and store the result in another variable called target. [ target = len - n]
36+
* => Now, we check for target == 0 and if its true than we have to remove our
37+
* head and point the head to next element .
38+
* for ex : head.next = head
39+
* After just return our head because we have no need to check other part.
40+
* => create a pointer = 1 and store head of LikedList to temp variable .
41+
* => After that , we have to iterate over linkedlist till our temp is not equal
42+
* to null to find our target element.
43+
* (Note : target element is always prev of node of node to remove for ex : 1-> 2-> 3->4-> 5
44+
* In this case 3 is our target because we have to remove 4.)
45+
* => for each iteration , we check if our target == pointer , In case its true
46+
* the we have to handle two case :
47+
* Case 1 : if our target node is last node of linked list ,then point temp to
48+
* null
49+
* explanation : 1-> 2-> 3-> 4-> 5 -> null
50+
* if our target is 5 the our new linkedlist will we like this : 1-> 2-> 3-> 4->
51+
* null
52+
* Case 2 : Target is in middle of linkedlist then , update temp pointer to
53+
* temp.next.next
54+
* explanation : 1-> 2-> 3-> 4-> 5 -> null
55+
* let say we have to remove 3 : then temp = 2
56+
* temp.next = 3 : node to remove
57+
* temp.next.next = 4
58+
* output : 1-> 2-> 4-> 5 -> null
59+
* => increment pointer and update temp to next node.
60+
* => In last just return node
61+
*/
62+
63+
class Solution {
64+
65+
public int calcLength(ListNode head) {
66+
int cnt = 0;
67+
while (head != null) {
68+
cnt++;
69+
head = head.next;
70+
}
71+
return cnt;
72+
}
73+
74+
public ListNode removeNthFromEnd(ListNode head, int n) {
75+
76+
int len = calcLength(head);
77+
int target = len - n;
78+
if (target == 0) {
79+
head = head.next;
80+
return head;
81+
}
82+
int pointer = 1;
83+
84+
ListNode temp = head;
85+
while (temp != null) {
86+
if (pointer == target) {
87+
ListNode key = temp.next;
88+
if (key == null) {
89+
temp = null;
90+
} else {
91+
temp.next = key.next;
92+
}
93+
94+
}
95+
pointer++;
96+
temp = temp.next;
97+
}
98+
99+
return head;
100+
101+
}
102+
}

0 commit comments

Comments
 (0)