描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1\to1\to21→1→2,返回1 \to 21→2.
给出的链表为1\to1\to 2 \to 3 \to 31→1→2→3→3,返回1\to 2 \to 31→2→3.
数据范围:链表长度满足 0 \le n \le 1000≤n≤100,链表中任意节点的值满足 |val| \le 100∣val∣≤100
进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
public class DeleteDuplicatesList {
static class ListNode {
int val;
ListNode next = null;
}
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
ListNode ps = head; // 慢指针
if(head == null || head.next == null){
return head;
}
ListNode pf = head.next; // 快指针
while(pf != null){
if(ps.val == pf.val){
// 快慢指针的值相等时,将慢指针.next指向快指针的下一个节点
ps.next = pf.next;
pf.next = null;
pf = ps.next;// 移动快指针,不要移动慢指针
}else {
// 快慢指针的值不相等
pf = pf.next;
ps = ps.next;
}
}
return head;
}
public static void main(String[] args) {
}
}