不使用Java库按字母顺序排序链表

不使用Java库按字母顺序排序链表,java,sorting,linked-list,bubble-sort,Java,Sorting,Linked List,Bubble Sort,我正试图用下面写的方法对我的单链表进行排序。我尝试使用冒泡排序,但我认为我的排序不正确。顺便说一下,我没有得到任何NullPointerException public void lister() { int n, c, d, swap; Node tempNode = head; for (c = 0; c < ( size - 1 ); c++) { tempNode = head; for (d = 0; d <

我正试图用下面写的方法对我的单链表进行排序。我尝试使用冒泡排序,但我认为我的排序不正确。顺便说一下,我没有得到任何NullPointerException

public void lister()
{ 
    int n, c, d, swap;
    Node tempNode = head;

    for (c = 0; c < ( size - 1 ); c++)
    {
        tempNode = head;
        for (d = 0; d < size - c - 1; d++)
        {
            String compare1 = ((Person)tempNode.getNext().getElement()).getName() + " " +
                ((Person)tempNode.getNext().getElement()).getSur();
            String compare2 = ((Person)tempNode.getElement()).getName() + " " +
                ((Person)tempNode.getElement()).getSur();

            if (compare1.compareTo(compare2) < 0)
            {
                Person tempPerson = (Person) tempNode.getElement();
                tempNode.setElement(tempNode.getNext().getElement());
                tempNode.getNext().setElement(tempPerson);
            }

            if(tempNode.getNext() != null)
                tempNode = tempNode.getNext();
        } // End of inner for loop
    } // End of outer for loop
} // End of lister function
SLinkedList类:


通过调试程序bro,使用断点并观察变量值。唯一的办法。好的,我会努力的,谢谢你的帮助。
private static void list()
{
    contactList.lister();
    contactList.listResults();
    int listNum = input.nextInt();
    contactList.getInOrder(listNum);
}
import java.util.*;

/** Singly linked list implementation .*/
public class SLinkedList<E> implements LinkedList<E>, Iterable<E>
{
    protected Node<E> head;     // head node of the list
    protected Node<E> tail;     // tail node of the list
    protected int size;         // number of nodes in the list

    public Iterator<E> 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<E> 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<E> 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<E> 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<E> 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<=size-2; i++) {
            tempNode = tempNode.getNext(); //go to element that before the tail
        }

        Node<E> tempNode2 = tail;
        tail = tempNode;
        tail.setNext(null);
        size--;
        return tempNode2.getElement();
    }

    public void remove(E element)
    {
        int index = 0;
        boolean found = false;
        Node<E> temp = head;
        for(int i=1; i<=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<E> prev = head;
            for(int i=1; i<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<=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<=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();
    }

    public void listResults()
    {
        Node tempNode = head;
        for(int i = 1; i <= size; i++)
        {
            System.out.println(i + ". " +((Person) tempNode.getElement()).getName() + " " + 
                ((Person) tempNode.getElement()).getSur());

            tempNode = head.getNext();
        }
    }

    public void getInOrder(int o)
    {
        Scanner input = new Scanner(System.in);
        Node tempNode = head;
        for(int i=1; i <= size; i++)
        {
            if(i==o)
            {
                System.out.println(tempNode.getElement());
            }
            tempNode = tempNode.getNext();
        }
        System.out.println("a:[<=] d:[=>] u:[update] i:[insert] r:[delete] e:[exit]");

        String action = input.next();

        if(action.equals("e"))
        {

        }
        else if(action.equals("a") && (o-1) != 0)
        {
            getInOrder(o - 1);
        }
        else if(action.equals("d") && (o+1) <= 9)
        {
            getInOrder(o + 1);
        }
        else if(action.equals("u"))
        {
            System.out.println("New Name: ");
            String nName = input.next();
            System.out.println("New Surname: ");
            String nSur = input.next();
            System.out.println("New Address: ");
            String nAdd = input.next();

            ((Person)tempNode.getElement()).setName(nName);
            ((Person)tempNode.getElement()).setSur(nSur);
            ((Person)tempNode.getElement()).setAdd(nAdd);               
        }
        else if(action.equals("i"))
        {
            System.out.println("Add a new number:\nType the type of the phone number:");
            String phoneType = input.next();
            System.out.println("Type the number: ");
            int phoneInput = input.nextInt();
            ((Person) getFromResults(o)).insertPhone(new PhoneNumber(phoneInput,phoneType));
        }
        else if(action.equals("r"))
        {
            //NullPointerException
            int index = 0;
            boolean found = false;
            Node<E> temp = head;
            for(int i=1; i<=size; i++) {//find the node with element
                index++;
                if(tempNode.getElement().equals(temp.getElement())){
                    found = true;
                    break;
                }
                temp = temp.getNext(); 
            }

            if(found){
                if(index == 1) 
                    removeFirst();

                else if(index == size)
                    removeLast();

                else{   
                    //find the previous node
                    Node<E> prev = head;
                    for(int i=1; i<index-1; i++) {
                        prev = prev.getNext(); 
                    }

                    prev.setNext(temp.getNext());
                    temp.setNext(null);
                    size--;
                }
            }
        }       
    }

    public void lister()
    { 
         //Alternative bubble sort i found from internet.
         int n, c, d, swap;

        Node tempNode = head;

        for (c = 0; c < ( size - 1 ); c++)
        {
            tempNode = head;
            for (d = 0; d < size - c - 1; d++)
            {
                String compare1 = ((Person)tempNode.getNext().getElement()).getName() + " " + 
                    ((Person)tempNode.getNext().getElement()).getSur();
                String compare2 = ((Person)tempNode.getElement()).getName() + " " + 
                    ((Person)tempNode.getElement()).getSur();
                if (compare1.compareTo(compare2) < 0)
                {
                    Person tempPerson = (Person) tempNode.getElement();
                    tempNode.setElement(tempNode.getNext().getElement());
                    tempNode.getNext().setElement(tempPerson);
                }
                if(tempNode.getNext() != null)
                    tempNode = tempNode.getNext();
            }
        }
    }
}