题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
方法1:
主要思路:
(1)找出一个链表结点,判断其后面的结点值是否和当前结点的值相同,若相同,则删除其后的这个结点值,一直删除到不相同,或者其后面的结点为空,然后跳到下一个不同值的结点;
(2)删除过程中,注释掉的部分为内存释放部分;
/**
* 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* curNode=head;
while(curNode){
//删除当前结点后面可能的相同的所有的结点
//注释掉的部分,是内存释放部分
while(curNode->next&&curNode->val==curNode->next->val){
//ListNode* tmp=curNode->next;
curNode->next=curNode->next->next;
//delete tmp;
}
curNode=curNode->next;
}
return head;
}
};