title: Sorting a List alphabetically using compareTo() method
body: <p>I am writing a phonebook program in java and i need to list people in the list alphabetically and to do that i need to write a sorting algorithm for a list in java and it should use only compareTo() method. So can anyone help me to do that?</p>
  
  <pre><code>public void listAlpha()
   {
       Node tempNode = head;
  
       for(int i = 0; i &lt;= size; i++)
          {
              for(int j = 0; j &lt;= i; j++)
              {
                  int comparison = ((tempNode.getNext().getElement().getName()).compareTo(tempNode.getElement().getName()));
                  if(comparison &lt; 0)
                  {
                      Person tempPerson =  tempNode.getElement();
  
                      tempNode.setElement(tempNode.getNext().getElement());
                      tempNode.getNext().setElement(tempPerson);
                      tempNode = tempNode.getNext();
                  }
              }
  
  
          }
  </code></pre>
  
  <p>(By the way this is a homework and i am using my own data structures.)</p>
  
  <p>This is the class that method i wrote above belongs:</p>
  
  <pre><code>import java.util.*;
  
  /** Singly linked list implementation .*/
  public class SLinkedList&lt;E&gt; implements LinkedList&lt;E&gt;, Iterable&lt;E&gt; {
    protected Node&lt;E&gt; head;       // head node of the list
    protected Node&lt;E&gt; tail;       // tail node of the list
    protected int size;       // number of nodes in the list
  
      public Iterator&lt;E&gt; iterator()
      {
          return new LinkedListIterator(head);
      }
  
    /** Default constructor that creates an empty list */
    public SLinkedList() {
      head = null;
      tail = null;
      size = 0;
    }
  
    public int size() { 
      return size;
    }
  
    public boolean isEmpty() {
      return size == 0;
    }
  
    public void addFirst(E newElement) {
      Node&lt;E&gt; newNode = new Node(newElement,null);
      if(size == 0) //if list is empty
          tail = newNode;
  
      newNode.setNext(head);
      head = newNode;
      size++;
    }
  
    public void addLast(E newElement) {
      Node&lt;E&gt; newNode = new Node(newElement,null);
  
      if(size == 0) //if list is empty
          head = newNode;
  
      if (size != 0) //if list is not empty
          tail.setNext(newNode);
  
      tail = newNode;
      size++;
    }
  
    public E removeFirst() {
      Node&lt;E&gt; tempNode = null;
      if (size != 0) {
          if(size == 1)
              tail = null;
  
          tempNode = head;
          head = head.getNext();
          tempNode.setNext(null);
          size--;
      }
  
      //if list is empty then return null
      return tempNode.getElement(); 
  
    }
  
    public E removeLast() {
      Node&lt;E&gt; tempNode = head;
  
      if(size == 0)
          return null;
  
      if(size == 1) {
          head = null;
          tail = null;
          size--;
          return tempNode.getElement();
      }
  
      //size is greater than 1
      for(int i=1; i&lt;=size-2; i++) {
          tempNode = tempNode.getNext(); //go to element that before the tail
      }
  
      Node&lt;E&gt; tempNode2 = tail;
      tail = tempNode;
      tail.setNext(null);
      size--;
      return tempNode2.getElement();
  
    }
  
    public void remove(E element){
      int index = 0;
      boolean found = false;
      Node&lt;E&gt; temp = head;
      for(int i=1; i&lt;=size; i++) {//find the node with element
          index++;
          if(temp.getElement().equals(element)){
              found = true;
              break;
          }
          temp = temp.getNext(); 
      }
  
      if(found){
          if(index == 1) 
              removeFirst();
  
          else if(index == size)
              removeLast();
  
          else{   
              //find the previous node
              Node&lt;E&gt; prev = head;
              for(int i=1; i&lt;index-1; i++) {
                  prev = prev.getNext(); 
              }
  
              prev.setNext(temp.getNext());
              temp.setNext(null);
              size--;
          }
      }
    }
  
    public int searchList(E searchKey) {
      if(size == 0)
          return -1;
  
      Node tempNode = head;
      for(int i=1; i&lt;=size; i++) {
          if(tempNode.getElement().equals(searchKey))
              return i; //return index of the node
          tempNode = tempNode.getNext();
      }
  
      return -1; //not found
    }
  
    public void printList() {
      Node tempNode = head;
      for(int i=1; i&lt;=size; i++) {
          System.out.print(tempNode.getElement());
          if(i!=size) //if it is not last element
              System.out.print(" - ");
          tempNode = tempNode.getNext();
      }
      System.out.println();
  
    }
  </code></pre>
  
  <p>Person class:</p>
  
  <pre><code>public class Person
  {
      private String name;
      private String surname;
      private String address;
      private PhoneNumber phone1;
      private PhoneNumber phone2;
      private PhoneNumber phone3;
  
      public Person()
      {
          name = null;
          surname = null;
          address = null;
          phone1.setPhone(0);
          phone1.setType("");
          phone2.setPhone(0);
          phone2.setType("");
          phone3.setPhone(0);
          phone3.setType("");
      }
  
      public Person(String n, String s, String a,PhoneNumber p1, PhoneNumber p2, PhoneNumber p3)
      {
          name = n;
          surname = s;
          address = a;
          phone1 = p1;
          phone2 = p2;
          phone3 = p3;
  
      }
  
      public String getName()
      {
          return name;
      }
  
      public void setName(String n)
      {
          name = n;
      }
      public String getSur()
      {
          return surname;
      }
  
      public void setSur(String s)
      {
          surname = s;
      }
  
      public void insertPhone(PhoneNumber phone)
      {
          if(phone2 == null)
              phone2 = phone;
          else if(phone3 == null)
              phone3 = phone;
      }
  
      public PhoneNumber getPhone1()
      {
          return phone1;
      }
  
      public PhoneNumber getPhone2()
      {
          return phone2;
      }
  
      public PhoneNumber getPhone3()
      {
          return phone3;
      }
  
      public String getAdd()
      {
          return address;
      }
  
      public void setAdd(String a)
      {
          address = a;
      }
  </code></pre>