存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
其实也很简单,人家怎么说,就怎么写。需要注意的是头节点也可能被干掉,所以要加一个假头节点。保证它一定不会被干掉,方便计算。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* head1 = new ListNode(INT_MAX, head);
ListNode* travelHead = head1;
while (travelHead -> next != nullptr) {
ListNode* tp1 = travelHead -> next;
if (tp1 -> next != nullptr) {
ListNode* tp2 = tp1 -> next;
if (tp1 -> val == tp2 -> val) {
int curVal = tp1 -> val;
while (tp2 != nullptr && tp2 -> val == curVal) {
tp2 = tp2 -> next;
}
travelHead -> next = tp2;
} else {
travelHead = tp1;
}
} else {
travelHead = tp1;
}
}
return head1 -> next;
}
};