BlackTDN :: LeetCode :: Solução para o Desafio 24 do Leetcode: Swap Nodes in Pairs em xBase

_Créditos das imagens: ChatGPT 

# Solução para o Desafio 24 do Leetcode: Swap Nodes in Pairs em xBase

O desafio [Swap Nodes in Pairs](https://leetcode.com/problems/swap-nodes-in-pairs/) propõe a inversão de pares adjacentes em uma lista encadeada, sem alterar os valores dos nós, apenas reorganizando as referências entre eles. Embora seja comum encontrar soluções em linguagens como Python ou Java, este artigo apresenta uma abordagem utilizando xBase, uma linguagem derivada do Clipper, conhecida por sua eficiência em aplicações comerciais e manipulação de dados.

## Implementação em xBase

A solução desenvolvida em xBase está disponível nos seguintes links:

- [README.md](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/024/README.md)
- [swap_nodes_in_pairs.24.1.prg](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/024/swap_nodes_in_pairs.24.1.prg)

O código define uma classe `TListNode` para representar os nós da lista encadeada, com atributos `value` (valor do nó) e `next` (referência ao próximo nó). A função `SwapPairs` é responsável por realizar a troca dos nós em pares.

### Estrutura da Classe TListNode


```xBase
function TListNode()
    static s_oTListNodeClass as object
    if (s_oTListNodeClass == NIL)
        s_oTListNodeClass := HBClass():New("TListNode")
        s_oTListNodeClass:AddData("value")
        s_oTListNodeClass:AddData("next", 10)
        s_oTListNodeClass:AddMethod("New", @TListNodeNew())
        s_oTListNodeClass:Create()
    endif
    return (s_oTListNodeClass:Instance()) as object
```


Este trecho define a estrutura básica de um nó da lista encadeada.

### Função SwapPairs


```xBase
static function SwapPairs(oHead as object)
    local oDummy as object
    local oFirst as object
    local oSecond as object
    local oCurrent as object

    oDummy := TListNode():New(0, NIL)
    oDummy:next := oHead
    oCurrent := oDummy

    while ((oCurrent:next != NIL) .and. (oCurrent:next:next != NIL))
        oFirst := oCurrent:next
        oSecond := oCurrent:next:next

        oFirst:next := oSecond:next
        oSecond:next := oFirst
        oCurrent:next := oSecond

        oCurrent := oFirst
    end while

    return (oDummy:next) as object
```


A função `SwapPairs` utiliza um nó fictício (`oDummy`) para facilitar a manipulação das referências durante a troca dos pares. Ela percorre a lista encadeada, identificando pares de nós adjacentes e ajustando as referências para inverter a ordem desses pares.

## Considerações Finais

Esta implementação demonstra a flexibilidade e capacidade do xBase em lidar com estruturas de dados complexas, como listas encadeadas, e algoritmos de manipulação de nós. A solução é eficiente e mantém a integridade dos dados, atendendo aos requisitos do desafio proposto pelo Leetcode.

## Hashtags

#xBase, #Harbour, #Programação, #ListaEncadeada, #Algoritmos, #DesenvolvimentoDeSoftware, #Leetcode, #SoluçãoDeProblemas, #LinguagemDeProgramação, #EstruturasDeDados, #SwapNodesInPairs 

Comentários

Postagens mais visitadas