Skip to content
本页目录

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

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

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。

示例 1:

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

示例 2:

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

提示:

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

思路

数组是升序排列的,因此我们先记录第一个数到临时变量 val 当遇到后面同样的数字的时候,就删除那个节点 cur.next = cur.next.next 当数字不同的时候,就更新 val ,在继续下面的循环

参考代码

csharp
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
    	if(head == null){
    		return null;
    	}
    	int val = head.val;
    	ListNode cur = head;
    	while(cur != null){
            if( cur.next != null && cur.next.val == val){
                cur.next = cur.next.next;
            }
            else{
                cur = cur.next;
                if(cur != null){
                    val = cur.val;
                }
            }    		
    	}
    	return head;
    }
}

优化代码(判断 cur.next)

csharp
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
    	if(head == null){
    		return null;
    	}
    	ListNode cur = head;
    	while(cur.next != null){
    		if(cur.val == cur.next.val){
    			cur.next = cur.next.next;
    		}
    		else{
    			cur = cur.next;
    		}
    	}
    	return head;
    }
}

Released under the MIT License.