- Remove Duplicates from Sorted List
中文English
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example
Example 1:
Input: null
Output: null
Example 2:
Input: 1->1->2->null
Output: 1->2->null
Example 3:
Input: 1->1->2->3->3->null
Output: 1->2->3->null
解法1:
注意内循环仍然要是while(),不能是if。不然多余2个的重复元素就会出错。
代码如下:
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: head is the head of the linked list
* @return: head of linked list
*/
ListNode * deleteDuplicates(ListNode * head) {
if (!head) return NULL;
ListNode * p = head;
while(p && p->next) {
while (p->next && p->val == p->next->val) {
ListNode * tempNode = p->next;
p->next = p->next->next;
tempNode->next = NULL;
}
p = p->next;
}
return head;
}
};
解法2:
解法1简化版。参考网上。
代码如下:
class Solution{
public:
/**
* @param head: The first node of linked list.
* @return: head node
*/
ListNode *deleteDuplicates(ListNode *head) {
if (head == NULL) {
return NULL;
}
ListNode *node = head;
while (node->next != NULL) {
if (node->val == node->next->val) {
node->next = node->next->next;
} else {
node = node->next;
}
}
return head;
}
};