题目地址:
https://www.lintcode.com/problem/remove-duplicates-from-sorted-list/description
给定一个有序链表,要求删除出现多于一次的元素,也即相同元素只剩一个。代码如下:
public class Solution2 {
/**
* @param head: head is the head of the linked list
* @return: head of linked list
*/
public ListNode deleteDuplicates(ListNode head) {
// write your code here
ListNode dummy = new ListNode(0), prev = dummy;
dummy.next = head;
ListNode cur = head;
while (cur != null) {
// 越过重复元素,使得cur指向重复元素中最后一个(如果不重复那就指向唯一的那个)
while (cur.next != null && cur.next.val == cur.val) {
cur = cur.next;
}
// 将那个元素连到prev后面,然后同时移动两个指针向后一步
prev.next = cur;
prev = prev.next;
cur = cur.next;
}
return dummy.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。