题解 | #删除有序链表中重复的元素-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;
}
}
