The professional, friendly Java community. 21,500 members and growing!

The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.

DoublyLinkedList out of control!

Ok, my addFirst(T data) method is so screwed up!!! I know I have silly references from changing and rechanging it, but what do I do to get it to work?

packageAssignment4;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JOptionPane;importjava.util.*;importjava.io.*;publicclass DoublyLinkedList<T>{privateclass Node<T>{private T data;private Node<T> next;private Node<T> previous;public Node(T data,Node<T> next, Node<T> previous){this.data= data;this.next= next;this.previous=previous;}public T getData(){return data;}public Node<T> getNext(){return next;}public Node<T> getPrevious(){return previous;}publicvoid setNext(Node<T> next){this.next= next;}publicvoid setPrevious(Node<T> previous){this.previous= previous;}}private Node<T> head;//head of the linked listprivate Node<T> tail;// tail of linked listprivateint size;privateImageIcon icon;privateIcon icon2;public DoublyLinkedList(){
head =null;
tail =null;
size =0;
icon =newImageIcon("doh3.jpg");}publicString toString(){String str ="[";
Node<T> curr;for(curr=head;curr!=null;curr = curr.getNext()){
str = str + curr.getData();if(curr.getNext()!=null)
str = str +" ";}
str = str +"]";return str;// can this stay the same? I did copy some of this from the SinglyLinkedList code we got in class. I don't know exactly how to edit it to make it a DoublyLinkedList.// i.e. a list that refers to two things, next and previous, rather than just next. It makes adding something at the end or close to the end more efficient than a SinglyLinkedList. }publicvoid addFirst(T data){// Node<T> newnode = new Node<T>(data,head, null);// Node<T> newnode;// newnode = head;//head = newnode.getPrevious(); // sets the head // newnode = head.next; // puts old head after new head// size++;if(size ==0){
Node<T> newNode =new Node<T>(data,head,tail);
head.setPrevious(newNode);
head = newNode;}
Node<T> newNode =new Node<T>(data,head,null);
head.setPrevious(newNode);
head = newNode;
newNode = head;
head = head.getNext();
size++;}publicvoid removeFirst(){if(size ==0){JOptionPane pane =newJOptionPane();
pane.setIcon(icon);
pane.showMessageDialog(null, "Cannot remove from an empty list!", "Invalid removal", JOptionPane.ERROR_MESSAGE);
pane.setMessageType(JOptionPane.ERROR_MESSAGE);return;}
Node<T> current = head;
head = head.getNext();//move head to the next element
current.setNext(null);}publicvoid addLast(T data){//If there are no elements, use the addFirst methodif(tail ==null){
addFirst(data);return;}/* Create the new Node from the data. Set next to null
* because this will be the last element and will not
* have a next. Set previous to tail because tail has
* not been changed yet and is currently referencing
* that element that will be directly before this element
*/
Node<T> newNode =new Node(data,null,tail);/* Since the tail variable still references the element
* directly before the new element, we can set that node's
* next to our new element.
*/
tail.setNext(newNode);//Set tail to our new Node
tail = newNode;//Increment size
size++;}publicvoid add(int index,T data){int i;if(index>size)return;if(index <0)return;if(head==null){
addFirst(data);return;}if(index == size){
addLast(data);return;}//step 1
Node<T> current;
current = head;for(i=0;i<index-1;i++){
current = current.getNext();}//current now refers to object immediately before new node//step 2
Node<T> newnode =new Node<T>(data,current.getNext(), current.getPrevious());//step 3
current.setNext(newnode);
size++;}publicvoid remove(int index){if((index<0)||(index>=size)){JOptionPane.showMessageDialog(null, "You cannot remove an out-of-bounds value!", "Invalid removal", JOptionPane.ERROR_MESSAGE);return;}
Node<T> current,previous2;
current = head;
previous2 =null;for(int i=0;i<index;i++){
previous2 = current;
current = current.getNext();}if(index!=0)
previous2.setNext(current.getNext());else{
head = head.getNext();}
size--;}public T get(int i){if(i <0|| i >= size)returnnull;// How do I get it to return the data at i?}public T front(){if(head ==null)returnnull;return(get(0));}public T back(){if(tail ==null)returnnull;return(get(size -1));}publicString printAlternate(){/*
This method returns a string that has
the data in the following fashion (assume for this example that the list stores String objects)
If the list is currently [amit is now here], it will return a string “[amit here is now]”
If the list is currently [amit is now currently here], it will return a string “[amit here is currently now]”
*/}}

Also, why won't my icon show in the corner instead of the error icon? Even when I put it there after the message type, it won't show, though it certainly recognizes it and can find it.

Re: DoublyLinkedList out of control!

Originally Posted by javapenguin

Ok, my addFirst(T data) method is so screwed up!!! I know I have silly references from changing and rechanging it, but what do I do to get it to work?

Try adding a ton of print statements, or better yet stepping through the code with a debugger, until you understand what's going on. Get it boiled down to a few lines- what you've posted is way more than most people are willing to sift through to help you find an answer.

Also, saying things like "it doesn't work" or "it falls apart" isn't really helpful. What actually happens? What were you expecting to happen? Why do you think it happens? What did you try? Are you getting any Exceptions? Be as specific as possible.

And a word to the wise- I'd refrain from adding a bunch of smileys or saying things like, "hellllllllp". It doesn't add anything to the question, and chances are it will annoy somebody who was otherwise willing to offer you a hand.

Re: DoublyLinkedList out of control!

Ok, how do I get the alternateString() method to work?

It's supposed to return a String where it take the first element in the list and the last, then the second, then the second to last, etc.
If the list is currently [amit is now here], it will return a string “[amit here is now]”
If the list is currently [amit is now currently here], it will return a string “[amit here is currently now]”