给定一个已排序的链表的头?head?, 删除所有重复的元素,使每个元素只出现一次 。返回?已排序的链表?。
思路一:使用两个指针,last指针指向上一个元素,current指向当前元素,当last指针的val与current的val值一样时,current后移,不一样则把last指针指向current元素。
思路二:使用一个指针point,当point与point的下一个元素val值相同时,point的next指针指向它再下一个元素(删除point的直接后继节点),反之point指针向后移动。
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
// 唯一序列的末尾元素
ListNode last = head;
// 未筛选序列的第一个元素
ListNode current = head;
while(current != null) {
while(current != null && current.val == last.val) {
current = current.next;
}
last.next = current;
last = current;
}
return head;
}
}
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// 唯一序列的末尾元素
ListNode* point = head;
while (point != nullptr && point->next != nullptr) {
if (point->val == point->next->val) {
point->next = point->next->next;
}else{
point = point->next;
}
}
return head;
}
};