每日算法 | 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;
}
}
依旧是慢索引进行获取不重复元素进行重排(可能还要加上计数),快索引去找元素与慢索引进行对比,所以无论一不一样快索引都要跳到下一个元素,慢索引在这一题则是对比到不同的就让下一个节点等于快索引的值,慢索引再跳到下一个节点去准备与下一个快索引得到的值进行比对,循环往复获得结果。
但注意了,这里要返回已排序的重排链表,比前面难了一点,但想必就一点点改动,难不了多少。
评论(0)