Description:
题目大意:删除单链表中所有重复的元素,只保留原来链表出现一次的元素
解题思路:
算法标签:递归,双指针
代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
// 如果链表为空或者只有一个元素
if(head == NULL || head -> next == NULL)
return head;
// 初始化为 head 的下一个节点,为了比较重复元素
ListNode* last = head -> next;
// 如果值相同
if(head -> val == last -> val) {
// 看看有多少个 last 指向的值和 head 相同
while(last != NULL && head -> val == last -> val)
last = last -> next;
// 此时 last 指向的和 head 的值不同,连带 head 一起删除
head = deleteDuplicates(last);
}
else {
head -> next = deleteDuplicates(last);
}
return head;
}
};