Description:
题目大意:删除链表中的重复元素,使其中每个元素只能出现一次
解题思路:
算法标签:链表,双指针
- 设置双指针 pre 和 last,pre 指向 head 节点,last 指向 head 的下一个节点
- 如果 last 指向的值和 pre 的值相同,last 右移,直到找到不同的,pre 的下一个节点指向 last
- 如果不相同,pre 和 last 同时右移
代码:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL || head -> next == NULL)
return head;
ListNode* pre = head;
ListNode* last = head -> next;
while(last != NULL) {
while(last -> val == pre -> val) {
if(last != NULL)
last = last -> next;
if(last == NULL)
break;
}
if(pre -> next != last) {
pre -> next = last;
pre = pre -> next;
if(last != NULL)
last = last -> next;
}
else {
pre = pre -> next;
if(last != NULL)
last = last -> next;
}
}
return head;
}
};