(Java se refiere a la oferta) Eliminar nodos duplicados en la lista vinculada

1. Análisis de preguntas

En una lista vinculada ordenada, hay nodos duplicados, elimine los nodos duplicados en la lista vinculada, los nodos duplicados no se conservan y se devuelve el puntero principal de la lista vinculada. Por ejemplo, la lista enlazada 1-> 2-> 3-> 3-> 4-> 4-> 5 se procesa como 1-> 2-> 5

La clave de esta pregunta es considerar la posibilidad de que el primer nodo y el segundo nodo se dupliquen, por lo que primero debe agregar un nodo principal, y los juicios posteriores pueden agregar el puntero pre para indicar el precursor y el último puntero para indicar que el puntero de trabajo es responsable de la búsqueda posterior.

Segundo, el código

public class Test_14 {
    
    
    public static void main(String[] args) {
    
    
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(1);
        ListNode node3 = new ListNode(1);
        ListNode node4 = new ListNode(1);
        ListNode node5 = new ListNode(1);
        ListNode node6 = new ListNode(1);
        ListNode node7 = new ListNode(1);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;
        node5.next = node6;
        node6.next = node7;

        ListNode result = deleteDuplication(node1);
        while (result != null) {
    
    
            System.out.println(result.val);
            result = result.next;
        }
    }

    private static ListNode deleteDuplication(ListNode pHead) {
    
    
        if (pHead == null || pHead.next == null) {
    
    
            return pHead;
        }
        //首先添加一个头结点,防止出现第一个和第二个结点就相同的情况
        ListNode head = new ListNode(0);
        head.next = pHead;
        //pre 指向当前确定不重复的结点,last 表示工作结点,负责往后搜索
        ListNode pre = head;
        ListNode last = pHead;
        while (last != null) {
    
    
            ListNode temp = last.next;
            if (temp != null && last.val == temp.val) {
    
    
                while (temp != null && last.val == temp.val) {
    
    
                    temp = temp.next;
                }
                pre.next = temp;
                last = temp;
            } else {
    
    
                pre = pre.next;
                last = temp;
            }
        }
        return head.next;
    }
}

Tres, resumen

Para la eliminación de la lista vinculada, generalmente se utilizan dos punteros, un precursor y un puntero de trabajo

Supongo que te gusta

Origin blog.csdn.net/nanhuaibeian/article/details/108592220
Recomendado
Clasificación