Duvida de Como fazer a Conversão de Expressão Infixa para Pós-fixa (Aplicação de PILHA)

Eu ja tenho os codigos prontos MAIS estou com uma grande duvida de como fazer Conversão de Expressão Infixa para Pós-fixa (Aplicação de PILHA)

package ativlistadupla;

public class Lista {
private No prim, ultimo;

public Lista() {
    prim = null;
    ultimo = null;
}

public No getUltimo() {
    return ultimo;
}

public No getPrimeiro() {
    return prim;
}

public void listar() {
    No tmp = prim;
    while (tmp != null) {
        System.out.println("Dado: " + tmp.dado);
        tmp = tmp.prox;
    }
    System.out.println("Final da lista");
}

public No buscar(No anterior) {
    No aux = prim;
    while (aux != null) {
        if (aux.prox == anterior) {
            break;
        } else {
            aux = aux.prox;
        }
    }
    return aux;
}

public No buscar(int valor) {
    No aux = prim;
    while (aux != null) {
        if (aux.dado == valor) {
            break;
        } else {
            aux = aux.prox;
        }
    }
    return aux;
}

public No buscarUltimo(int valor) {
    No aux = ultimo;
    while (aux != null) {
        if (aux.dado == valor) {
            break;
        } else {
            aux = aux.prox;
            aux = null;
        }
    }
    return aux;
}

public void inserirInicio(int num) {
    No novo = new No();
    novo.dado = num;
    novo.prox = prim;
    prim = novo;        
}

public void inserirFim(int num) {
    No novo = new No();
    novo.dado = num;
    novo.prox = null;
    if (ultimo != null) {
        ultimo.prox = novo;
        ultimo = novo;
    } else {
        prim = novo;
    }
}

public void inserirMeio(int num, int anterior) {
    No novo = new No();
    novo.dado = num;
    No aux = buscar(anterior);
    if (aux == null) {
        System.out.println("Dado anterior nao localizado");
        System.out.println("Novo dado inserido no final da lista");
        inserirFim(num);
    } else {
        novo.prox = aux.prox;
        aux.prox = novo;
    }
}

public boolean remover(int nro) {
    boolean flag = false;
    No exc = buscar(nro);
    if (exc != null) {
        if (exc == prim) {
            prim = prim.prox;
        }
        else if(exc == ultimo){
            No anterior = buscar(exc);
            ultimo = anterior;
        } else {
            No anterior = buscar(exc);
            anterior.prox = exc.prox;
        }
        flag = true;
    }
    return flag;
}

public boolean removerPrimeiro(int nro){
    if(prim != null){
        prim = prim.prox;
        return true;
    }
    else{
        return false;
    }
}

public boolean removerUltimo(int nro){
    if(ultimo != null){
        No anterior = buscar(ultimo);
        ultimo = anterior;
        return true;
    }
    else{
        return false;
    }
}

}


package ativlistadupla;

public class Pilha {
private Lista vet;

public Pilha() {
    vet = new Lista();
}

public void push(int dado) {
    vet.inserirFim(dado);            
}

public int pop() {
    int resp = -1;
    No remover = vet.getUltimo();
    if (remover != null) {
        vet.removerUltimo(remover.dado);
        remover.dado = resp;
    }
    return resp;
}

public boolean isEmpty(){
    if(vet.getPrimeiro() != null){
        return false;
    }else{
        return true;
    }
}

}***************************************************0