82. Remove Duplicates from Sorted List II

来源:互联网 发布:淘宝抓取图片软件 编辑:程序博客网 时间:2024/05/16 10:13

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

题意:去除排序链表中重复的元素,即出现重复则这个数值的所有结点都要从链表去除。

思路:先看头结点重复没,对头结点进行处理,然后递归出现其后的结点。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:ListNode* deleteDuplicates(ListNode* head) {while (head){ListNode* p = head->next;if (p && p->val == head->val){while (p && p->val == head->val){head = p;p = p->next;}head = p;}else{break;}}if (head == NULL)return head;head->next = deleteDuplicates(head->next);return head;}};

思路2:非递归实现,速度会快很多。

class Solution {public:ListNode* deleteDuplicates(ListNode* head) {ListNode *pre = NULL;ListNode *newHead = NULL;ListNode *cur = head;int tmp = INT_MIN;while (cur){if (cur->val == tmp || (cur->next && cur->next->val == cur->val)){//满足删除条件tmp = cur->val;if (pre){pre->next = cur->next;}}else{if (!pre)newHead = cur;pre = cur;}cur = cur->next;}return newHead;}};












0 0