当前位置:   article > 正文

力扣---删除排序链表中的重复元素 II

力扣---删除排序链表中的重复元素 II

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

示例 1:

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

输入:head = [1,1,1,2,3]
输出:[2,3]

思路:三个指针,一次遍历,遇到重复节点删除即可

代码:

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode() : val(0), next(nullptr) {}
  7. * ListNode(int x) : val(x), next(nullptr) {}
  8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  9. * };
  10. */
  11. //三个指针 一次遍历
  12. class Solution {
  13. public:
  14. ListNode* deleteDuplicates(ListNode* head) {
  15. if(head==nullptr){
  16. return head;
  17. }
  18. ListNode * pre = new ListNode(0,head);
  19. ListNode * start = pre;
  20. ListNode * end = pre;
  21. ListNode * end_pre = pre;
  22. start = start->next->next;
  23. end = end->next;
  24. int flag = 0;
  25. while(start!=nullptr){
  26. if(start->val == end->val){
  27. end->next = start->next;
  28. start = start->next;
  29. flag = 1;
  30. }
  31. else{
  32. if(flag==0){
  33. end = end ->next;
  34. start = start->next;
  35. end_pre = end_pre->next;
  36. }
  37. else{
  38. end_pre->next = end_pre->next->next;
  39. end = end->next;
  40. start = start->next;
  41. flag = 0;
  42. }
  43. }
  44. }
  45. if (flag==1){
  46. end_pre->next = end_pre->next->next;
  47. end = end->next;
  48. }
  49. return pre->next;
  50. }
  51. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/416962
推荐阅读
相关标签
  

闽ICP备14008679号