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.了解边界点,如果head = NULL,就返回NULL;
2.定义两个节点pre和cur,pre = head,cur = head->next;
3.判断pre->val 是否等于 cur->val;
4.若相等,就将pre->next 指向cur->next,然后删除cur;
5.若不相等,就将pre->next指向cur;
6.重复3-5步,知道cur为NULL;
7.最后返回head,即为结果。
/**
* 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) return NULL;
for(ListNode *pre = head,*cur = head->next;
cur;
cur = cur->next){
if(pre->val == cur->val){
pre->next = cur->next;
delete cur;
}
else{
pre = cur;
}
}
return head;
}
};