每日一道算法题020 删除排序链表中的重复元素

485 阅读1分钟

题目

leetCode 第 83 题,删除排序链表中的重复元素 关联类型:链表

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

返回同样按升序排列的结果链表。

示例 1:

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

示例 2:

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

做题时间

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
       
       

    }
}

以上给出方法输入参数,完成作答。

题目分析

  1. 此题目和之前的 「删除排序数组中的重复项」题目是类似的
  2. 此题目可以使用快慢指针进行求解
  3. 慢指针用于记录当前位置
  4. 快指针用于循环,与慢指针的值进行比较

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.9 MB, 在所有 Java 提交中击败了47.75%的用户

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {//空的直接返回
            return null;
        }
        ListNode slowNode = head;      //给慢指针赋值
        ListNode fastNode = head.next; //给快指针赋值
        while (fastNode != null) {
            if (slowNode.val != fastNode.val) {//如果不相等
                slowNode.next = fastNode;   //慢指针的 next 指向快指针位置
                slowNode = fastNode;        //将快指针 node 赋值给慢指针
            }
            fastNode = fastNode.next;  //快指针指向 next
        } 
        slowNode.next = null;  //最后给慢指针 next 指向 null
        return head;            //返回链表头即可

    }
}