A partir do algoritmo de eleição para um anel unidirecional listado abaixo derive um algoritmo de eleição para um anel bidirecional.
 when decision  (initiate_election)  do 
	 participant <- T;
	 sendL  (election, my_number); -- manda para a esquerda
	 end do ;
 when received  (election, j)  do 
	 case  j > my_number  then begin 
		 sendL  (election, j);
		 participant <- T;
		 end case; 
	 case  j < my_number  and  participant  then begin 
		 sendL  (election, my_number);
		 participant <- T;
		 end case; 
	 case  j = my_number  then sendL  (elected,i);
		 end case ;
 when received  (elected, j)  do 
	 coordinator <- j;
	 participant <- F;
	 if  j <> my_number  then sendL  (elected, j);
	 end if; 
 end do;  
O algoritmo  de eleição para um anel bidirecional é baseado na idéia de conduzir uma sequência de eleições em subconjuntos crescentes de processos até todos serem incluídos. 
Se Pi inicia uma eleição, ele se declara um candidato e tenta saber se seu identificador (que ele conhece) é maior que o dos seus dois vizinhos (que ele não conhece). 
Ele faz isto enviando seu valor a cada um dos vizinhos Pk e Pl. 
Estes fazem as comparações necessárias e se k ou l é maior que i, o processo correspondente substitui Pi como candidado; caso contrário Pi se mantém candidato e o teste é feito para os demais processos. 
Isto continua até que todos os processos tenham sido consultados. 
O papel de um processo derrotado em uma eleição é simplesmente passar qualquer mensagem recebida de um lado para outro, usando 
uma primitiva  pass .