leetcode 删除链表重复元素II 中等
如果值有重复,就一直往下走即可,直至 head -val != head -> next -> val.
用一个变量来表示是否有值出现过,没有出现过才加入答案。
并且 因为是对原链表的链接, 而原链表结点可能有后续结点, 但后续结点是需要删除的. 所以最后要 cur -> next = nullptr
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode *vHead = new ListNode; ListNode *cur = vHead; while(head) { // 下面 while 循环结束时, head 与 与其下一个结点值不相同. // 但无法说明 head 当前所在值是否重复过 bool tag = false; while(head -> next && head -> val == head -> next -> val) { tag = true; head = head -> next; } if(!tag) { // 当前值未重复过 cur -> next = head; cur = cur -> next; } head = head -> next; } cur -> next = nullptr; // 因为是对原链表的链接, 而原链表结点可能有后续结点, 但后续结点是需要删除的 auto ret = vHead -> next; delete vHead; return ret; } };