liuxuhelloworld's notebook

题目链接

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/

解答过程

这个题目和Problem83相似,但这里要求删除所有重复值节点,比Problem83处理起来就麻烦一些。每次循环处理时,要先计数当前节点值,如果是重复值节点,直接跳过即可;如果不是重复值节点,追加到slow节点后即可。

	public ListNode deleteDuplicates(ListNode head) {
		ListNode dummy = new ListNode(-1);
		ListNode slow, fast;

		slow = dummy;
		fast = head;
		while (fast != null) {
			int target = fast.val;
			int cnt = 1;

			while (fast.next != null) {
				if (fast.next.val == target) {
					fast = fast.next;
					cnt++;
				} else {
					break;
				}
			}

			if (cnt == 1) {
				slow.next = fast;
				slow = slow.next;
			} else {
				slow.next = null;
			}

			fast = fast.next;
		}

		return dummy.next;
	}

瞅了眼官方题解,思路其实是类似的,官方题解的代码更简洁但也更难懂一些,我认为我的代码更好理解。