题解 | #删除有序链表中重复的元素-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 //设立一个虚拟节点dh,方便返回,t节点指向dh ListNode dh = new ListNode(0), pre = head, t = dh; //将虚拟节点连接头结点 t.next = head; //m用来标记,判断当前值是否重复,:如果当前节点的值等于m,说明m已经出现过了 int m = 1001; while (pre != null) { //当pre.next不为空,并且pre.next.val==pre.val时,说明该值重复出现多次,跳过该节点,标记该值 while (pre.next != null && pre.val == pre.next.val) { m = pre.val; pre = pre.next; } //此时会出现 t ... pre pre.next 这种链表,需要对pre判断:如果pre.val==m说明重复,不执行修改 //否则,修改链表,将t.next设为pre,更新t为pre if (pre.val != m) { t.next = pre; t = t.next; } //处理下一个节点 pre = pre.next; } //特殊情况,当pre为空时,已经跳出了循环,但是此时t.next还没有更新,需要将t.next设为null t.next = null; // t.next = pre; return dh.next; } }