[算法学习] 删除排序链表中的重复元素

RoLingG 算法 2024-04-01

每日算法 | 83.删除排序链表中的重复元素

例题:83.删除排序列表中的重复元素

题目描述

给定一个已排序的链表的头 head删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表

看这题是不是很像26题和27题的样子,只不过前面是排序数组内删除重复项,这个是删除排序链表中的重复元素。所以同理,按一套方法,也就是双索引去做这题。代码:

/**
 * 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) {
        if (head == null) {
            return null;
        }
        ListNode s = head;    //这两快慢索引原本是整数=0,链表里就是=head
        ListNode f = head;
        while(f != null) {
            if (f.val != s.val) {
                s.next = f;
                s = s.next;
            } 
            f = f.next;
        }
        s.next = null;
        return head;
    }
}

依旧是慢索引进行获取不重复元素进行重排(可能还要加上计数),快索引去找元素与慢索引进行对比,所以无论一不一样快索引都要跳到下一个元素,慢索引在这一题则是对比到不同的就让下一个节点等于快索引的值,慢索引再跳到下一个节点去准备与下一个快索引得到的值进行比对,循环往复获得结果。

但注意了,这里要返回已排序的重排链表,比前面难了一点,但想必就一点点改动,难不了多少。

PREV
[算法学习] 移除元素
NEXT
[算法学习] 完全二叉树节点计算

评论(0)

发布评论