题解 | #删除有序链表中重复的元素-II# 三指针
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 思路: 三指针 * 采用三个指针分别记录第一个节点的上一个节点(prev),第一个节点(p1),和第二个节点(p2), * 在遍历链表中比较p1和p2,当val相等的时候,通过循环让p2继续向后走,直到找到一个不相等的节点 * 此时可以让prev直接指向p2,就完成了重复元素的删除操作 * p1和p2不等的时候,就让prev向后移动 * 最后返回头结点 * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates (ListNode head) { if(head == null || head.next == null){ return head; } ListNode s = new ListNode(-1); s.next = head; ListNode prev = s; ListNode p1; ListNode p2; while((p1 = prev.next) != null && (p2 = p1.next) != null){ if(p1.val == p2.val){ while((p2 = p2.next) != null && p1.val == p2.val){ } prev.next = p2; }else{ prev = prev.next; } } return s.next; } }