简体   繁体   中英

Removing Item at index from a linked list?

   public class LinkedList
   {
  private Node head;
  private Node tail;
  private int numberOfElements;

  public LinkedList()
  {
      head = null;
      tail = null;
      this.numberOfElements = 0;
  }

  public int length()
  {
      return this.numberOfElements;
  }

  public void removeFront()
  {
      Node currNode = head;
      head = head.getNextNode();
      currNode.setNextNode(null);
      this.numberOfElements--;  
  }

  public void removeLast()
  {
      this.tail = this.tail.prev;

  }

  public void removeAtIndex(int index) throws AmishException 
  {
     if (index == 0) {
           Node q = head;
           head = q.getNextNode();
      }
      else if ((index > numberOfElements - 1) || (index < 0)) 
           System.out.println("Index out bounds.");
      else {
        Node currNode = head;
        for (int i = 0; i < index; i++) {

            currNode = currNode.getNextNode();
        }
        Node temp = currNode;
        currNode = temp.getPrevNode();
        currNode.setNextNode(temp.getNextNode());
        temp = null;
        numberOfElements--;
    }




  }

Node -

 public class Node 
 {
private int payload;
private Node nextNode;
public Node prev;
public Node previous;
public Node next;

public Node(int payload)
{
    this.payload = payload;
    nextNode = null;
}

public Node getNextNode()
{
    return this.nextNode;

}

public Node getPrevNode()
{
    return this.getPrevNode();
}
public void setNextNode(Node n)
{
    this.nextNode = n;
}

public void display()
{
     System.out.print("(" + super.toString() + " : " + this.payload + ")");
     if(this.nextNode != null)
     {
         System.out.print(" -> ");
         this.nextNode.display();
     }
     else
     {
         System.out.println("");
     }
}

public String toString()
{
    return "" + super.toString() + " : " + this.payload;
}

public void setPrevNode(Node n) 
{

        previous = n;


}




  }

Driver -

    public class Driver 
     {

      public static void main(String[] args) throws Exception
      {
          LinkedList ll = new LinkedList();
          ll.addFront(7);
          ll.addFront(5);
          ll.addEnd(13);
          ll.addEnd(27);
          ll.addFront(2);
          ll.addAtIndex(1, 0);
          ll.addAtIndex(12, 6);
          ll.addAtIndex(9, 2);
          ll.addAtIndex(11, 2);

          //ll.removeFront();

          //ll.removeLast();

          ll.removeAtIndex(1);



          for(int i = 0; i < ll.length(); i++)
          {
              System.out.println(ll.get(i));
          }


       }    
   }

I got what I need to remove the head's index, but how to do anything else is beyond me. I have the methods to remove the head and the tail now I just need to know how to remove at an index just Like if I were to add at an index.

Okay, completely editing this answer. I took your code and went from that. There were some issues with your Node class, check out mine. I created a barebones Node class, add the any other functionality you may need/want. For the LinkedList class, I created a simple add method that adds to the end of the list. Use this as a prototype for your other adds. Everything right now is working and I put some println's to help you see where the program is at. I highly recommend using a debugger. Also note that this is a doubly linked list.

Linked List

public class LinkedList {
  private Node head;
  private Node tail;
  private int numberOfElements;

  public LinkedList()
  {
      head = null;
      tail = null;
      numberOfElements = 0;
  }

  public int length()
  {
      return numberOfElements;
  }

  public void removeAtIndex(int index) 
  {
     if (index == 0) {
           Node q = head;
           head = q.getNextNode();
           numberOfElements--;
      }
      else if ((index > numberOfElements - 1) || (index < 0)) 
           System.out.println("Index out of bounds.");
      else {
        Node currNode = head;
        for (int i = 0; i < index; i++) {
            //Node p = currNode;
            System.out.println("At this payload " + currNode.getPayload());
            currNode = currNode.getNextNode();
            System.out.println("Now at this payload " + currNode.getPayload());
        }
        Node temp = currNode;
        System.out.println("Removing the node with payload " + temp.getPayload()); 
        currNode = temp.getPrevNode();
        currNode.setNextNode(temp.getNextNode());
        temp = null;
        numberOfElements--;
    }

  }

  public void add(int num) {
      Node newNode = new Node(num);
      newNode.setNextNode(null);
      if (numberOfElements == 0) {
          newNode.setPrevNode(null);
          head = newNode;
          tail = newNode;
        }
      else if (numberOfElements == 1) {
          head.setNextNode(newNode);
          tail = newNode;
          tail.setPrevNode(head);
        }
      else {
        newNode.setPrevNode(tail);
        tail.setNextNode(newNode);
        tail = newNode;
      }
      System.out.println("Inserted " + num + " into the linked list");
     numberOfElements++;
    }

  public void printList() {
      Node temp = head;
      while (temp != null) {
          System.out.println("Node with payload " + temp.getPayload());
          temp = temp.getNextNode();
        }
    }


  }

Node

public class Node {
    private int payload;
    private Node next;
    private Node prev;

    public Node(int payload) {
        this.payload = payload;
        prev = null;
        next = null;
    }

    public Node getNextNode() {
        return next;
    }

    public Node getPrevNode() {
        return prev;
    }

    public void setNextNode(Node n) {
        next = n;
    }

    public void setPrevNode(Node n) {
        prev = n;
    }

    public int getPayload() {
        return payload;
    }

}

Driver

public class Driver {

      public static void main(String[] args) {
          LinkedList ll = new LinkedList();
          ll.add(7);
          ll.add(5);
          ll.add(13);
          ll.add(27);
          ll.add(2);
          ll.printList();
          ll.removeAtIndex(3);
          ll.printList();
      }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM