моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
стр1 стр2
1 -> 1 -> 2 -> 3 -> 3 -> нольp1.val == p2.val, затем удалите p2, обратите внимание, что p1 в это время остается неизменным.
стр1 стр2
1 -> 2 -> 3 -> 3 -> нольp1.val != p2.val Затем p1, p2 перемещаются назад.
стр1 стр2
1 -> 2 -> 3 -> 3 -> ноль
стр1 стр2
1 -> 2 -> 3 -> 3 -> нольp1.val == p2.val, затем удалите p2
стр1 стр2
1 -> 2 -> 3 -> нольКогда p2 == null выйти из цикла
код
- public ListNode deleteDuplicates(ListNode head) {
- // 链表节点 < 2
- if (head == null || head.next == null) {
- return head;
- }
- // 链表节点 >= 2
- ListNode p1 = head;
- ListNode p2;
- while ((p2 = p1.next) != null) {
- if (p1.val == p2.val) {
- p1.next = p2.next;
- } else {
- p1 = p1.next;
- }
- }
- return head;
- }
p1 — предыдущий узел, который нужно удалить. Каждый цикл сравнивает значения p2 и p3.
Если значения p2 и p3 повторяются, то p3 продолжает двигаться назад до тех пор, пока не будет найден узел, не дублирующийся p2, а p1 указывает на p3 для завершения удаления.
Если значения p2 и p3 не перекрываются, p1, p2 и p3 сдвигаются назад на одну позицию и продолжают описанную выше операцию.
p2 или p3 имеет значение null, выйдите из цикла
Например, когда p2 имеет значение null, связанный список имеет значение 1 1 1 null.
стр1 стр2 стр3
с, 1, 1, 1, 2, 3, нольстр1 стр2 стр3
с, 1, 1, 1, 2, 3, нольстр1 стр2 стр3
с, 1, 1, 1, 2, 3, нольстр1 стр3
с, 2, 3, нольстр1 стр2 стр3
с, 2, 3, нольстр1 стр2 стр3
с, 2, 3, ноль
код
- public ListNode deleteDuplicates(ListNode head) {
- if (head == null || head.next == null) {
- return head;
- }
-
- ListNode s = new ListNode(-1, head);
- ListNode p1 = s;
- ListNode p2;
- ListNode p3;
- while ((p2 = p1.next) != null && (p3 = p2.next) != null) {
- if (p2.val == p3.val) {
- while ((p3 = p3.next) != null
- && p3.val == p2.val) {
- }
- p1.next = p3;
- } else {
- p1 = p1.next;
- }
- }
- return s.next;
- }