Leetcode 83:Remove Duplicates from Sorted List

Leetcode 83:Remove Duplicates from Sorted List

Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.

说人话:

去掉有序链表中重复的元素

要点:

  • 链表
  • 有序
  • 去重复

举例:

Leetcode 83:Remove Duplicates from Sorted List

[法1] 穿针引线

思路

因为链表本身是有序的,所以下一个节点 next 和当前节点 cur 只可能有 < = > 这三种关系。利用这个特性我们可以建立 2 个指针:

  • cur:当前节点
  • next:下一个节点

穿针引线的过程中,我们不断比较 cur 和 next 节点上值的关系

  • 如果不等,那么直接穿针引线
  • 如果相等,就删除掉 next 节点(cur.next = cur.next.next)

直到遍历完链表,也就实现了去重

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {

        //当前结点
        ListNode cur = head;

        while(cur != null){
          	//下一个节点
            ListNode next = cur.next;
          	//没有下一个节点的时候就结束了
            if(next == null){
                break;
            }
            //不相等,继续穿针引线
            if(cur.val != next.val){
                cur = next;
            }else{
                //相等,那么删除掉后面的元素
                cur.next = next.next;
            }

        }
        return head;
    }
}
提交结果
Leetcode 83:Remove Duplicates from Sorted List
代码分析
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
上一篇:pandas处理大数据题目的操作


下一篇:【dataframe 】去重函数drop_duplicates使用方法