83. Remove Duplicates from Sorted List

题目描述:

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example

Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

题目翻译

给定一个有序链表,删除所有重复的元素使得每个元素只出现一次。

例如:

给出 1->1->2,返回 1->2。
给出 1->1->2->3->3,返回 1->2->3。

解题方案

标签: linked list

思路:

  • 方法比较清晰,维护两个指针,一个指向当前不重复的最后一个元素,一个进行依次扫描,遇到不重复的则更新第一个指针,继续扫描,否则就把前面指针指向当前元素的下一个(即把当前元素从链表中删除)。
  • 时间上只需要一次扫描,所以是O(n),空间上两个额外指针,是O(1)。

代码:

/**
 * 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) {
        if(head == NULL)
            return head;
        ListNode* pre = head;
        ListNode* cur = head->next;
        while(cur!=NULL)
        {
            if(cur->val == pre->val){
                pre->next = cur->next;
            }else{
                pre = cur;
            }
            cur = cur->next;
        }
        return head;
    }
};

参考资料

results matching ""

    No results matching ""