Home > Software design >  Traversing a linked-list
Traversing a linked-list

Time:06-30

I created a simple node class, and solution class with an insert method, a display method, along with Main. I am trying to insert 4 numbers into the linked-list and have it display the entire list. At most I am only able to have it display 2 of the numbers. The issue is most likely in my insert method. I've spent hours trying to figure out what the issue is. What could be wrong with my code?

public static Node insert(Node head, int data)
    {
        Node newNode = new Node(data);
        if (head == null)
        {
            head = newNode;
        }
        else
        {
            while (head.next != null)
            {
                head = head.next;
            }
            head.next = newNode;
        }
        return head;
    }

public static void display(Node head)
    {
        Node start = head;
        while (start != null)
        {
            Console.Write(start.data   " ");
            start = start.next;
        }
    }

static void Main(String[] args)
    {

        Node head = null;
        int[] numbers = new int[]{2, 3, 4, 1};
        for (int i = 0; i < numbers.Length; i  )
        {
            int data = numbers[i];
            head = insert(head, data);
        }
        display(head);
        Console.ReadLine();
    }

class Node
{
    public int data;
    public Node next;
    public Node(int d)
    {
        data = d;
        next = null;
    }
    public Node() { }

}

CodePudding user response:

Yes, the problem is in the insert method:

   while (head.next != null)
   {
        // From now on you have the initial head got lost
        head = head.next;
   }

Quick amendment is to change while into for:

    public static Node insert(Node head, int data) {
      Node newNode = new Node(data);
      
      if (head == null) {
        head = newNode;
      }
      else {
        // we loop on last, keeping head intact 
        for (Node last = head; ; last = last.next)  
          if (last.next == null) {
            last.next = newNode;

            break;
          }
      }
      return head;
    }

we can simplify it further:

    public static Node insert(Node head, int data) {
      Node newNode = new Node(data);

      for (Node last = head; last != null; last = last.next)
        if (last.next == null) {
          last.next = newNode;

          return head;
        }

      return newNode;
    }
  • Related