Skip to content
本页目录

0082-删除排序链表中的重复元素II

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

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中没有重复出现的数字。 返回同样按升序排列的结果链表。

示例 1:

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

输入:head = [1,1,1,2,3]
输出:[2,3]

提示:

链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列

思路

  1. 删除重复节点,因为 head 也可能重复,所以需要设置一个 dummyHead
  2. 升序排列,只需要判断当前节点和下个节点是否相等,相等则持续后移
  3. 循环中只要判断: 相等时候如何处理,不相等如何处理即可

参考代码

csharp
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
    	ListNode dummyHead = new ListNode(-101,head);
    	ListNode pre = dummyHead;
    	ListNode cur = head;
    	while(cur != null){
    		if(cur.next != null && cur.val == cur.next.val){ //相等:持续右移
    			int val = cur.val;
    			while(cur != null && cur.val == val ){
    				cur = cur.next;
    			}
                pre.next = cur;
    		}
            else{ //不相等:移到下一个处理
                pre = cur;
    		    cur = cur.next;
            }    		
    	}
    	return dummyHead.next;
    }
}

Released under the MIT License.