Reversing the order of nodes in a doubly linked list (Solution provided)

  • Thread starter Thread starter s3a
  • Start date Start date
  • Tags Tags
    List Nodes
Click For Summary
SUMMARY

The discussion focuses on reversing the order of nodes in a doubly linked list using Java. The provided solution by the teacher contains flaws, particularly in the handling of the header and trailer references. The user's revised version attempts to correct these issues but still requires validation. Additionally, the conversation clarifies the distinction between head/tail and header/trailer, emphasizing that header and trailer are dummy nodes used to simplify list operations.

PREREQUISITES
  • Understanding of doubly linked list data structures
  • Proficiency in Java programming
  • Knowledge of node manipulation methods (getNext, setNext, getPrev, setPrev)
  • Familiarity with algorithm design and debugging techniques
NEXT STEPS
  • Review Java documentation on linked lists and node manipulation
  • Implement and test various algorithms for reversing linked lists
  • Explore the use of dummy nodes in data structures
  • Learn about memory management and pointer handling in Java
USEFUL FOR

Students studying data structures, software developers working with linked lists, and anyone interested in algorithm optimization and debugging techniques in Java.

s3a
Messages
828
Reaction score
8

Homework Statement


Write an algorithm for reversing the order of nodes in a doubly linked list. You may assume a head and tail reference, and you may directly get and set the next field of any node, but you may not assume any add or remove methods are defined. You may assume a header or trailer rather than head or tail, if you wish.

Homework Equations


How a (Doubly) Linked List works.


The Attempt at a Solution


The teacher gave this code:
Code:
public void reverse() {

        DNode cur = header.getNext();
        DNode tmp;

        while (cur != trailer) {
            //  swap the next and prev referneces
            tmp = cur.getNext();
            cur.setNext(cur.getPrev());
            cur.setPrev(tmp);
            //  advance to the next node in the sequence
            cur = tmp;
        }

        //   swap the references of header.next and trailer.prev
        header.setNext(trailer.getPrev());
        trailer.setPrev(header.getNext());
        tmp = header;
        trailer = header;
        header = trailer;
    }

[U]However, I believe it has flaws, so here is my version, please tell me if mine is 100% correct or not[/U]:
void reverse() {
        DNode cur = header.getNext();
        DNode tmp;

        while (cur != trailer) {
            tmp = cur.getNext();
            cur.setNext(cur.getPrev());
            cur.setPrev(tmp);

            cur = tmp;
        }

        tmp = trailer.getPrev();
        trailer.setPrev(header.getNext());
        header.setNext(tmp);

        tmp = trailer;
        trailer = header;
        header = tmp;
    }

Other question:
Also, what's the difference between a head and a header as well as a between a tail and a trailer? Or, are they the exact same thing?

Any input would be GREATLY appreciated!
Thanks in advance!
 
Last edited by a moderator:
Physics news on Phys.org
s3a said:
I believe it has flaws ...
looks like you solved the issue of using header.getNext() after having just modified it with header.setNext().

s3a said:
Also, what's the difference between a head and a header as well as a between a tail and a trailer?
I did a web search for link list header, and from this web site:

http://pages.cs.wisc.edu/~vernon/cs367/notes/4.LINKED-LIST.html

a header and a trailer are dummy nodes. An "empty" list would include two nodes, a dummy header node and a dummy trailer node. Considering the example code does not check for NULL after the statement DNode cur = header.getNext(), it's apparently using header and trailer dummy nodes.

head and tail are pointers to the first and last nodes of a list. head and tail pointers would normally be part of a list class as opposed to a node class. A list class could include other information such as the number of nodes on the list (for standard template library, this is list.size()). If a list is empty, then head == tail == NULL. If a list has one node, then head == tail == ptr to node, and node.prev() == node.next() == NULL. These conditions require special handling that having a header node and trailer node somewhat eliminate.
 
Last edited:
Thank you very much. :)
 

Similar threads

  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 11 ·
Replies
11
Views
12K
  • · Replies 9 ·
Replies
9
Views
3K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 17 ·
Replies
17
Views
7K
  • · Replies 2 ·
Replies
2
Views
3K