Quicksort em Lista Dinamica Simples

Estou com alguns problemas num quicksort aqui, ele tem q organizar uma lista dinamica simplesmente encadeada, na hora da inserção, vou por as classes aqui

Classe Pont

public class Pont{
    
    int valor;
    Pont prox;
    
    public Pont( int v ){
        
        valor = v;
        prox = null;
        
    }
    
}

Classe Lista Encadeada


public class ListaEncadeada{
    
    Pont ini = null;
    Pont fim = null;
    int tam = 0;
    Pont pv;
    
    public ListaEncadeada(){
        
        
        
    }
    
    public void PushIni( int v ) {
        
        Pont novo = new Pont(v);
        
        if( ini == null ){
            
            ini = novo;
            fim = novo;
            tam = 1;
            
        }else{
            
         /*   Pont aux = ini;
            ini = novo;
            ini.prox = aux;*/
            pv = ini;
            QuickSort(  novo, 1, tam );
            //     fim = novo;
            tam += 1;
        }
        
    }
    
    public void PushFim( int v ){
        
        Pont novo = new Pont(v);
        
        if( fim == null ){
            
            ini = novo;
            fim = novo;
            tam += 1;
            
        }else{
            
            fim.prox = novo;
            fim = novo;
            tam += 1;
            //  QuickSort( 0, tam );
            
        }
        
    }
    
    public int PopPos(int pos) throws ListaException{
        
        Pont aux = ini;
        Pont ant = ini;
        int val = 0;
        
        if( ini == null ){
            
            throw new ListaException( "ERRO: Lista Vazia" );
            
        }else{
            
            
            if( pos < 1 || pos > tam ){
                
                throw new ListaException( "ERRO: Posição invalida" );
                
            }else{
                
                if( pos == 1 ){
                    
                    val = ini.valor;
                    ini = ini.prox;
                    tam -= 1;
                    
                    
                }else{
                    
                    for( int cont = 1; cont<= pos -2; cont++ ){
                        
                        ant = ant.prox;
                        
                    }
                    for( int cont = 1; cont <= pos-1; cont++ ){
                        
                        aux = aux.prox;
                        
                    }
                    val = aux.valor;
                    aux = aux.prox;
                    ant.prox = aux;
                    tam -=1;
                }
                
                return val;
                
            }
            
        }
        
    }
    
    public void QuickSort( Pont n, int i, int t ){
        
        Pont pivo = pv;
        
        int value = n.valor;
  
                if( t == 1 ){
                    
                    if( value > pivo.valor ){
                        
                        pivo.prox = n;
                        // tam += 1;
                        
                    }else{
                        
                        n.prox = pivo;
                        pivo = n;
                        //  tam += 1;
                        
                    }
                    
                }else{
                    
                    if( t == 2 ){
                        
                        if( value > pivo.valor ){
                            
                            if( value > pivo.prox.valor ){
                                
                                Pont aux = pivo.prox;
                                aux.prox = n;
                                //tam += 1;
                                
                            }else{
                                
                                Pont aux = pivo.prox;
                                pivo.prox = n;
                                n.prox = aux;
                                //tam += 1;
                                
                            }
                            
                        }else{
                            
                            n.prox = pivo;
                            pivo = n;
                            // tam += 1;
                            
                        }
                        
                    }else{
                        
                        int p = (t - i)/2;
                        
                        for( int cont = 1; cont <= p; cont++ ){
                            
                            pv = pv.prox;
                            t -= 1;
                            
                        }
                        
                        if( pv.valor == value ){
                            
                            Pont aux = pivo.prox;
                            pivo.prox = n;
                            n.prox = aux;
                            
                        }else{
                            
                            if( pv.valor > value ){
                                
                                QuickSort( n, 0, t );
                                
                            }else{
                                
                                QuickSort( n, p, t );
                                
                            }
                        }
                          
            }
            
        }
        
        
    }
    
    public String recuperaElementos(){
        
        StringBuilder sb = new StringBuilder();
        
        Pont primeiro = ini;
        
        //verifica se a elementos na Fila
        while( primeiro!= null ) {
            
            //adiciona o ID ao sb e depois incrementa primeiro11
            
            sb = sb.append( primeiro.valor + "-" );
            primeiro = primeiro.prox;
            
        }
        
        
        return sb.toString();
        
    }
    
}

o codigo da lista esta bem extenso, mas quando eu uso a lista e vou usar para imprimir os elementos eles não imprimem, e eu fico sem saber que falor atribuir para a variavel ini para o RecuperaElementos() funcionar perfeitamente, alguem ai sabe me dizer?

PS: Quando eu usava que Pont pivo = ini funcionava, e agora com pv naum funciona.
PS2: Uso o NetBeans IDE 5.0

agradeço desde já