首页 > 代码库 > LeetCode---Remove Duplicates from Sorted List II
LeetCode---Remove Duplicates from Sorted List II
题目链接
题意: 给出单链表的head指针, 要求去除链表中所有出现重复的元素, 如1->2->3->3->4->4->5
, 返回 1->2->5
这题纠结了有两天, 重要的是把思路想清楚然后就可以痛苦的A掉, 不然老是会绕来绕去...
我的大体思路是这样的: 使用三个指针 pre保存链表中前一个没有出现重复的结点, p保存当前测试是否出现重复的结点, q用来测试p.
使用flag标记是否是第一次找到没有出现重复结点. 如果当前被测试的结点为空或者后面已经没有结点, 直接返回.
附上代码:
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 ListNode *p = head, *pre = head;
13 int flag = 0;
14 while (true) {
15 if (p == NULL or p->next == NULL) {
16 return head;
17 } else {
18 ListNode *q = p->next;
19 while (q!= NULL and q->val == p->val) {
20 q = q->next;
21 }
22 if (p->next == q) {
23 if (flag == 0) {
24 flag = 1;
25 head = p;
26 } else {
27 pre = p;
28 }
29 } else {
30 if (flag == 0) {
31 head = pre = q;
32 } else {
33 pre->next = q;
34 }
35 }
36 p = q;
37 }
38 }
39 return head;
40 }
41 };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。