题解 | #删除有序链表中重复的元素-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 ListNode dummy = new ListNode(-1); dummy.next = head; ListNode pre = dummy; ListNode cur = head; //标记当前是否存在重复元素状态 int flag = 0; while(cur!=null && cur.next!=null){ //当前元素与下一元素值相等时,只移动cur,pre不动 if(cur.val == cur.next.val){ cur = cur.next; flag = 1; }else{//当前元素与下一元素值不相等时,如果不处于重复状态,则向前移动pre和cur;如果处于重复状态,说明重复元素到了末尾,直接令pre指向下一元素 cur = cur.next; if(flag == 0){ pre = pre.next; }else{ //删除pre至下一节点 pre.next = cur; flag = 0; } } } //如果退出循环时,仍处于重复状态,说明末尾几个元素是重复元素,直接让pre指向null if(flag == 1){ pre.next = null; } return dummy.next; } }