题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//空链表
if(head == NULL)
return NULL;
ListNode* res = new ListNode(0);
//在链表前加一个表头
res->next = head;
ListNode* cur = res;
while(cur->next != NULL && cur->next->next != NULL){
//遇到相邻两个节点值相同
if(cur->next->val == cur->next->next->val){
int temp = cur->next->val;
//将所有相同的都跳过
while (cur->next != NULL && cur->next->val == temp)
cur->next = cur->next->next;
}
else
cur = cur->next;
}
//返回时去掉表头
return res->next;
}
};
// class Solution {
// public:
// /**
// * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
// *
// *
// * @param head ListNode类
// * @return ListNode类
// */
// ListNode* deleteDuplicates(ListNode* head) {
// // write code here
// // 利用map
// map<int,int> m;
// while(head)
// {
// ++m[head->val];
// head = head->next;
// }
// ListNode* ans = new ListNode(-1);
// ListNode* temp = ans;
// for(auto it=m.begin(); it!=m.end(); ++it)
// {
// // cout << it->first <<", " << it->second << endl;
// if(it->second==1)
// {
// ListNode* next = new ListNode(it->first);
// temp->next = next;
// temp = temp->next;
// }
// }
// return ans->next;
// }
// };
C++题库 文章被收录于专栏
非淡泊无以明志,非宁静无以致远
