Dada uma lista encadeada, organize todos os nós pares e ímpares juntos. Observe que os nós ímpares e pares aqui se referem à paridade do número do nó, não à paridade do valor do nó. Por favor, tente fazer isso com um algoritmo no local.

O título original:

 Cole o código primeiro:

public class Solution328 {
    public ListNode oddEvenList(ListNode head) {
        //当链表为空时,直接返回
        if (head == null){
            return head;
        }
        //创建节点oddnum和节点evennum,始终指向奇数和偶数的最后一个节点
        ListNode oddnum = head;
        ListNode evennum = head.next;
        //当evennum为最后一个节点时循环结束
        while (evennum != null && evennum.next != null){
            //创建一个cur指针,指向evennum的后继节点
            ListNode cur = evennum.next;
            //将evennum后面的那个奇数节点移到前面
            evennum.next = cur.next;
            cur.next = oddnum.next;
            oddnum.next = cur;
            //evennum和oddnum后移一步
            oddnum = oddnum.next;
            evennum = evennum.next;
        }
        return head;
    }
}

Análise de ideias:

Nesta questão, somos solicitados a alinhar nós ímpares com nós ímpares e nós pares com nós pares, onde ímpar e par se referem ao número de nós; e precisamos usar o algoritmo no local para fazer isso. Portanto, precisamos operar diretamente na lista vinculada.

Como uma lista encadeada precisa ser dividida em uma parte ímpar e uma parte par, primeiro criamos dois ponteiros oddnum (ímpar) e evennum (par), apontando para o último nó da parte ímpar e o último nó da parte par, respectivamente. , para que possamos O nó sucessor de evennum é movido para trás de oddnum, porque evennum aponta para um nó de número par, então seu nó sucessor deve ser um nó de número ímpar.

Depois de mover o sucessor de evennum para trás de oddnum, mova ambos um passo para trás, de modo que sempre aponte para o último nó da parte ímpar ou par.

Como o título exige que a parte ímpar esteja na frente e a parte par fique atrás, podemos usar evennum para julgar o final do loop: quando evennum está vazio ou o nó sucessor de evennum está vazio, significa que a lista encadeada foi completada e o loop pode ser encerrado neste momento. Por fim, retorne ao nó principal.

Acho que você gosta

Origin blog.csdn.net/weixin_56960711/article/details/122497353
Recomendado
Clasificación