博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)
阅读量:5075 次
发布时间:2019-06-12

本文共 1348 字,大约阅读时间需要 4 分钟。

题目描述

 

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5输出: 1->2->5

示例 2:

输入: 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(int x) : val(x), next(NULL) {} 7  * }; 8  */ 9 class Solution {10 public:11     ListNode* deleteDuplicates(ListNode* head) {12         if(head == NULL) return NULL;13         ListNode *left = head;14         while(left && left->next && left->val == left->next->val){15             int val = left->val;16             while(left && left->val == val)17                 left = left->next;18         }19         if(left == NULL) return NULL;20         head = left;21         ListNode *right;22         while(left){23             right = left->next;24             while(right && right->next && right->val == right->next->val){25                 int val = right->val;26                 while(right && right->val == val)27                     right = right->next;28             }29             left->next = right;30             left = right;31         }32         return head;33     }34 };

 

转载于:https://www.cnblogs.com/wmx24/p/9448063.html

你可能感兴趣的文章