Search code examples
c#reversesingly-linked-list

Reversing single linked list in C#


I am trying to reverse a linked list. This is the code I have come up with:

 public static void Reverse(ref Node root)
 {
      Node tmp = root;
      Node nroot = null;
      Node prev = null;

      while (tmp != null)
      {
          //Make a new node and copy tmp
          nroot = new Node();    
          nroot.data = tmp.data;

          nroot.next = prev;
          prev = nroot;   
          tmp = tmp.next;
       }
       root = nroot;            
  }

It is working well. Was wondering if it possible to avoid creating new node. Would like to have suggestions on this.


Solution

  • Node p = root, n = null;
    while (p != null) {
        Node tmp = p.next;
        p.next = n;
        n = p;
        p = tmp;
    }
    root = n;