给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次.
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
解题思路:
删除排序链表重复的元素,只保证每个元素只出现一次,这题还有一个变形是重复的直接删除,不保留;
考虑到可能要删除头节点,先申请一个头,连接到链表上。
然后从头开始比较,如果发现head和head->next值相等,
再进入一个循环,当temp和temp->next不等跳出循环,
head->next=temp->next,中间元素删除,并且保留了head;
返回节点是注意是申请节点的Next;
/**
* 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) {
if(head==NULL||head->next==NULL)
{
return head;
}
ListNode*first=new ListNode(0);
first->next=head;
while(head&&head->next)
{
int num=head->val;
int num2=head->next->val;
if(num2==num)
{
ListNode*temp=head->next;
while(temp->next&&temp->val==temp->next->val)
{
temp=temp->next;
}
head->next=temp->next;
}
head=head->next;
}
return first->next;
}
};