1. 题目
2. 思路
(1) 双指针法
- 利用双指针法同时遍历链表,pre指向cur的前一个结点,若cur指向的结点与下一个结点的值相等,则记录该值并开始向后遍历,直到找到第一个值不等于该值的结点,将pre指向的结点的next指向该结点,即可删除中间重复的结点。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class ListNode {
int val;
ListNode next = null;
}
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode preHead = new ListNode();
preHead.next = head;
ListNode pre = preHead;
ListNode cur = head;
while (cur != null) {
if (cur.next != null) {
if (cur.val == cur.next.val) {
int val = cur.val;
while (cur != null && cur.val == val) {
cur = cur.next;
}
pre.next = cur;
} else {
cur = cur.next;
pre = pre.next;
}
} else {
break;
}
}
return preHead.next;
}
}