Here is the linked class that I created and I wrote a method that checked if there was a duplicate words in my linked list. I tried to sent the string to the addFirst method but I don’t know why it doesn’t work with me
JavaScript
x
class LinkedList<String>
{
private class Node<String>
{
private String word; // reference to the element stored at this node
private Node<String> next; // reference to the subsequent node in the list
public Node(String w, Node<String> n)
{
word = w;
next = n;
}
public String getWord( ) { return word; }
public Node<String> getNext( ) { return next; }
public void setNext(Node<String> n) { next = n; }
}
private Node<String> head = null; // head node of the list (or null if empty)
private Node<String> tail = null; // last node of the list (or null if empty)
private int size = 0; // number of nodes in the list
public LinkedList( ) { }
public int size( ) { return size; }
public boolean isEmpty( ) { return size == 0; }
public Node<String> getHead( )
{ // returns the head node
if (isEmpty( )) return null;
return head;
}
public void addFirst(Node<String> w)
{ Node<String> newest;
newest= w;
tail.next=newest;
newest.next=head;
size++;
}
public void addLast(Node<String> w){
Node<String> newest;
newest=w;
tail.next=newest;
newest.next=head;
size++;
}
public String last( )
{ // returns (but does not remove) the last element
if (isEmpty( )) return null;
return tail.getWord( );
}
public boolean checkDuplicate(Node<String> w) {
Node temp;
for(Node a=tail.next;a !=null;a=a.next){
temp=a;
for(Node b=temp.next;b != null;b=b.next){
if(b.equals(temp.next))
return true;
}
}
return false;
}
}
in the main i can’t insert the words to the circular linked list
JavaScript
public class Duplicate {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
LinkedList<String> list = new LinkedList<String>();
// the prblem start from here
list.addFirst("world");
list.addFirst("world");
list.addFirst("will");
list.addFirst("be");
list.addFirst("will");
list.addFirst("a better");
list.addFirst("place");
//to here
System.out.println(list.checkDuplicate(list.getHead()));
}
}
Advertisement
Answer
sorry – a lot of things are wrong. Here is the code pleas study the difference to your. To initialize private class variables you must use the constructor. Your addFirst() method must take a String instead of a Node object. The output is:
-Examine node ‘place’ -Examine node ‘a better’ -Examine node ‘will’ -First duplicate is ‘will’ -true
JavaScript
public class LinkedTest // Realy want a circulare linked list or a normal linked list ???
{
private MyNode head; // head node of the list (or null if empty)
private MyNode tail; // last node of the list (or null if empty)
private int size; // number of nodes in the list
private class MyNode<> // INNER class
{
private String word; // reference to the element stored at this node
private MyNode next; // reference to the subsequent node in the list
public MyNode(String w, MyNode n)
{
word = w;
next = n;
}
// The outer class has access to the variables of the inner
// public String getWord( ) { return word; }
// public MyNode<String> getNext( ) { return next; }
// public void setNext(MyNode<String> n) { next = n; }
} // end of inner class
public LinkedTest( ) { head = null; tail=null; size=0; } // constructor
public int size( ) { return size; }
public boolean isEmpty( ) { return size == 0; }
public MyNode getHead( ) { return head; }
public void addFirst(String w)
{
MyNode n = new MyNode(w,null);
if (head == null)
{ head = n; tail = n;
} else
{
//n.setNext(head);
n.next = head;
head = n;
}
size++;
}
public void addLast(String w)
{
MyNode n = new MyNode(w,null);
if (tail != null)
{ tail.next = n; // tail.setNext(w);
tail = n;
} else
{ head = n;
tail = n;
}
size++;
}
public String last( )
{ // returns (but does not remove) the last element
return tail == null ? null : tail.word;
}
/**
* Checks the linked list for at least one duplicate
* @return true if a duplicte was found, false otherwise
*/
public boolean checkDuplicate()
{
String str;
for (MyNode a = head;a != null; a = a.next)
{
str = a.word;
System.out.println("Examine node '" + str + "'");
for (MyNode b = a.next;b != null;b = b.next) // scan the list behind 'a'
{
if (str.equals(b.word))
{
System.out.println("First duplicate is '" + str + "'");
return true;
}
}
}
return false;
} //---------------- checkDuplicate
} // end of class LinkedTest