Skip to content

Commit 03c8834

Browse files
committed
added approach 2 of 6 in java
1 parent d11ff70 commit 03c8834

File tree

2 files changed

+163
-1
lines changed

2 files changed

+163
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
import java.util.*;
2+
abstract class Approach2
3+
{
4+
/**
5+
* LINKED LIST CLASS
6+
**/
7+
private static class LinkedList
8+
{
9+
/**
10+
* NODE CLASS
11+
* for linked list node
12+
**/
13+
private class Node
14+
{
15+
private int data;
16+
private Node next;
17+
18+
//constructor
19+
public Node(int data)
20+
{
21+
this.data=data;
22+
next=null;
23+
}
24+
25+
/**
26+
* getData()
27+
* @return data in the node
28+
**/
29+
public int getData()
30+
{
31+
return data;
32+
}
33+
34+
/**
35+
* getNext()
36+
* @return the next node
37+
**/
38+
public Node getNext()
39+
{
40+
return next;
41+
}
42+
43+
/**
44+
* setNext()
45+
* @param next
46+
**/
47+
public void setNext(Node next)
48+
{
49+
this.next=next;
50+
}
51+
}
52+
53+
private Node head; //head of the linked list
54+
55+
//constructor for linked list
56+
public LinkedList()
57+
{
58+
head=null;
59+
}
60+
61+
/**
62+
* insert_at_head()
63+
* it will insert node at the head of the linked list
64+
* @param data
65+
**/
66+
public void insert_at_head(int data)
67+
{
68+
Node newNode = new Node(data);
69+
if(head==null)
70+
{
71+
head=newNode;
72+
}
73+
else
74+
{
75+
newNode.setNext(head);
76+
head=newNode;
77+
}
78+
}
79+
80+
/**
81+
* print_list()
82+
* it will print the linked list
83+
**/
84+
public void printList()
85+
{
86+
if(head==null)
87+
{
88+
System.out.println("NULL");
89+
}
90+
else
91+
{
92+
Node current=head;
93+
while(current!=null)
94+
{
95+
System.out.print(current.getData() +" -> ");
96+
current=current.getNext();
97+
}
98+
System.out.println("NULL");
99+
}
100+
}
101+
102+
/*====================================================================*/
103+
/**
104+
* APPROACH 2
105+
* Using two current pointers
106+
* Find the remaining nodes from right on every node
107+
* Find the count of remaining nodes
108+
* if count is equal to the nth node to be founded then print that node
109+
* if count is less than the nth node return
110+
* if count is grater than the nth node then move current forward
111+
**/
112+
public void printNthNodeFromLast(int num)
113+
{
114+
Node current=head;
115+
while(current!=null)
116+
{
117+
int count=0; //count of remaining node
118+
Node current2=current;
119+
while(current2!=null)
120+
{
121+
count++;
122+
current2=current2.getNext();
123+
}
124+
125+
if(count==num)
126+
{
127+
System.out.println(current.getData());
128+
return;
129+
}
130+
else if(count<num)
131+
{
132+
System.out.println("fewer number of nodes");
133+
return;
134+
}
135+
else if(count>num)
136+
{
137+
current=current.getNext();
138+
}
139+
}
140+
}
141+
/*====================================================================*/
142+
}
143+
144+
public static void main(String[] args)
145+
{
146+
LinkedList ll = new LinkedList();
147+
ll.insert_at_head(3);
148+
ll.insert_at_head(1);
149+
ll.insert_at_head(4);
150+
ll.insert_at_head(2);
151+
ll.insert_at_head(5);
152+
153+
ll.printList();
154+
155+
Scanner in = new Scanner(System.in);
156+
System.out.println("Enter the nth node from last");
157+
int n = in.nextInt();
158+
159+
ll.printNthNodeFromLast(n);
160+
in.close();
161+
}
162+
}

Java/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* MISC
4242
* Find the nth node from end in single linked list
4343
* APPROACH 1: [Compute the size while adding](Data-Structures/LISTS/MISC/Nth-node-from-end/Approach1.java)
44-
* APPROACH 2: Using two current pointers
44+
* APPROACH 2: [Using two current pointers](Data-Structures/LISTS/MISC/Nth-node-from-end/Approach2.java)
4545
* APPROACH 3: Using hashtable
4646
* APPROACH 4: Using Hashtable while adding
4747
* APPROACH 5: Finding node in one scan

0 commit comments

Comments
 (0)