基本思路
要设置一个表头作为前置节点,然后比较前置节点后面的两个节点值是否相等,如果相等就连续去掉这些相等节点,使前置节点的下一个节点为下一次要比较的节点,如果后面两个节点值不相等,就更新前置节点为当前节点,下一次比较就从当前节点的后两个节点开始。
参考
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
if (head == null) {
return null;
}
ListNode res = new ListNode(-1);
ListNode current = res;
res.next = head;
// 设置一个前置节点,然后比较前置节点后面节点的相等情况
while (current.next != null && current.next.next != null) {
if (current.next.val == current.next.next.val) { // 如果遇到后面两个相邻节点的值都相等,就将所有相同的节点都跳过
int temp = current.next.val; // 记录这一段内的相同节点值
while (current.next != null && current.next.val == temp) {
current.next = current.next.next;
}
}
else {
current = current.next;
}
}
return res.next;
}
}



京公网安备 11010502036488号