Node1







import java.io.*;

class Node1 {
  
   private int data;
   private Node1 vidare;
   private boolean empty;
   
   //konstruktor
   
   public Node1(int in, Node1 vid) {
      vidare=vid;
      empty=false;
      data = in;
   }
   
   public Node1() {
      empty=true;
   }
   
   
   //klassiska primitiver
   
   public Node1 concat(int in) {
      Node1 n = new Node1(in,this);
      return n;
   }
   
   public int first() {
      return data;
   }
      
   public Node1 rest() {
      return vidare;
   }
   
   public boolean isEmpty() {
      return empty;
   }
   
   public void print(){  //skriver ut listan
      if (empty) {
         return;
      }
      System.out.print(data+ " ");
      rest().print();
   }

   public Node1 removeNthRek(int i) {   //tar bort i:te elementet rekursivt
      if (isEmpty()) {       //kolla om listan är tom
          System.out.println("Listan är tom.");
          return null;
      }
      if (i<1) {             //se om man anropat funktionen med fel index
          System.out.println("Fel index! Elementen har index större än noll!");
          return null;
      }
      if (i==1){            //hoppar över i
          return rest();
      }
      return rest().removeNthRek(i-1).concat(first()); //fortsätter tills vi kommer fram till i
   }

   public Node1 removeNthIter(int i) {
      if (empty) {
          System.out.println("Listan är tom.");
          return null;
      }
      if (i<1) {
          System.out.println("Fel index! Elementen har index större än noll!");
          return null;
      }
      Node1 temp=this;
      Node1 temp1=new Node1();
      for (int n=0; n< i-1; n++) {  //sätt in data i elementen till vänster om i in i temp1
          temp1=new Node1(temp.data,temp1);   
          temp=temp.vidare;
      }
      temp=temp.vidare;            //hoppa över det i:te elementet
      for (int n=0; n< i-1; n++) {  //sätt ihop temp1 med resten av listan
          temp=new Node1(temp1.data,temp);
          temp1=temp1.vidare;
      }
      return temp;
   }

   public Node1 addLast(int el) {
      if (isEmpty()) {
         Node1 l=new Node1();
         Node1 x=new Node1(el,l);
         return x;
      }
      return new Node1(first(),rest().addLast(el));
   }

   public Node1 addTwo(Node1 l) {
      if (l.isEmpty()) return this;
      return this.addLast(l.first()).addTwo(l.rest());
   }


   public static void main(String[] args) {
      int n=4;
      Node1 l1=new Node1();
      Node1 l2=l1.concat(9);
      Node1 l3=l2.concat(7);
      Node1 l4=l3.concat(5);
      Node1 l5=l4.concat(3);
      Node1 l6=l5.concat(1);

      System.out.print("Listan före: ");
      l6.print();
      System.out.println();
      System.out.print("Listan efter (rekursivt): ");
      l6.removeNthRek(n).print();
      System.out.println();
      System.out.print("Listan efter (iterativt): ");
      l6.removeNthIter(n).print();
      System.out.println();
      System.out.print("Testar en tom lista: ");
      l1.removeNthRek(4);
      System.out.print("Testar med en index mindre än 1: ");
      l6.removeNthRek(-1);
      l3.addLast(12).print();
      l3.addTwo(l6).print();
   }
}






Tillbaks till huvudsidan

email: Alireza.Niai_nouri.2077@student.uu.se