本文共 1130 字,大约阅读时间需要 3 分钟。
题目描述
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。C++
/** * 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) {} * }; */ /*已经升序排列 只删重复数,保留非重复的 如果是这种情况 1 --> 1 --> 1 --> 2 --> 3 head next 1.则需要移动next直到出现与当前head.value不相等的情况(含null) 2.并且此时的head已经不能要了,因为已经head是重复的节点递归 */class Solution { public: ListNode* deleteDuplicates(ListNode* head) { bool flag=false; //考虑特殊情况 if(!head || !head->next) return head; //判是否是这种情况 //1->1->1->1->2>3..... //此时head=2; ListNode* next=head->next; if(head->val==next->val){ while(next && head->val==next->val){ next=next->next; } head=deleteDuplicates(next); }else{ head->next=deleteDuplicates(next); } return head; }};