题解 | #删除有序链表中重复的元素-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 { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; } }