Uno: solución al problema
Tiempo: O (n), Espacio: O (1)
Dos: ejemplos de código completos (versión C ++ y versión Java)
C ++:
clase Solución { public : ListNode * partición (ListNode * head, int x) { if (head == NULL) return NULL; ListNode * más pequeño = nuevo ListNode ( 0 ); ListNode * mayor = nuevo ListNode ( 0 ); ListNode * ps = más pequeño; ListNode * pg = mayor; para (ListNode * p = head; p! = NULL; p = p-> next) { if (p-> val < x) { ps -> siguiente = p; ps = ps-> siguiente; } más { pg -> siguiente = p; pg = pg-> siguiente; } } ps -> siguiente = mayor-> siguiente; pg -> siguiente = NULL; volver más pequeño-> siguiente; } };
Java:
clase Solución { partición pública ListNode (encabezado ListNode, int x) { if (head == null ) return null ; ListNode más pequeño = nuevo ListNode ( 0 ); ListNode mayor = nuevo ListNode ( 0 ); ListNode ps = más pequeño; ListNode pg = mayor; for (ListNode p = head; p! = null ; p = p.next) { if(p.val < x) { ps.next = p; ps = ps.siguiente; } más { pg.next = p; pg = pg.siguiente; } } ps.next = mayor.next ; pg.next = null ; volver más pequeño.siguiente; } }