LeetCode 83. 删除排序链表中的重复元素 Remove Duplicates from Sorted List (Easy)

Posted zsy-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 83. 删除排序链表中的重复元素 Remove Duplicates from Sorted List (Easy)相关的知识,希望对你有一定的参考价值。

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

示例 1:

输入: 1->1->2
输出: 1->2
示例 2:

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

来源:力扣(LeetCode)

解法一:循环删除重复节点。

/**
 * 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 == nullptr || head->next == nullptr)
            return head;

        ListNode* pNode = head;

        while (pNode != nullptr)
        {
            ListNode* pNext = pNode->next;  //下一节点

            //下一节点不为空, 而且和当前节点相等, 一直删除
            while (pNext != nullptr && pNode->val == pNext->val)
            {
                pNext = pNext->next;
                pNode->next = pNext; //越过下一个重复节点
            }
            //否则去下一个节点
            pNode = pNode->next;
            if (pNext != nullptr)
                pNext = pNext->next;
        }
        return head;
    }
};

 

解法二:递归删除重复节点,思路一致。

/**
 * 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 == nullptr || head->next == nullptr)
            return head;

        head->next = deleteDuplicates(head->next);

        return (head->val == head->next->val) ? head->next : head;
    }
};

 

类似题目:《剑指offer》第十八题II:删除链表中重复的结点

以上是关于LeetCode 83. 删除排序链表中的重复元素 Remove Duplicates from Sorted List (Easy)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode(83)-删除排序链表中的重复元素

[LeetCode]83. 删除排序链表中的重复元素

LeetCode83----删除排序链表中的重复元素

LeetCode-83. 删除排序链表中的重复元素(java)

leetcode 83 删除排序链表中的重复元素

LeetCode Algorithm 83. 删除排序链表中的重复元素