Given a sorted linked list,
delete all duplicates such that each element appear only once.
For example, given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3.
Задан связный список. Удалите
все дубли элементов. То есть каждый элемент должен встречаться только раз.
Например, по списку 1->1->2 верните 1->2. По списку 1->1->2->3->3 верните 1->2->3.
// C++
/**
*
Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode*
deleteDuplicates(ListNode* head) {
}
};
// Java
/**
*
Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
}
}
список
Идем по списку слева
направо, пока он содержит хотя бы два элемента. Если текущий элемент равен
следующему, то перебрасываем next указатель текущего элемента на
элемент за следующим.
Реализация алгоритма
class Solution
{
public:
ListNode*
deleteDuplicates(ListNode* head)
{
if (head == NULL || head->next == NULL) return head;
ListNode *p = head;
while (p != NULL && p->next != NULL)
if(p->val == p->next->val)
p->next =
p->next->next;
else
p = p->next;
return head;
}
};
Java реализация
public class
Solution
{
public ListNode deleteDuplicates(ListNode head)
{
if (head == null || head.next == null) return
head;
ListNode p = head;
while (p != null && p.next != null)
if(p.val == p.next.val)
p.next =
p.next.next;
else
p = p.next;
return head;
}
}