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

2021-02-02 04:15

阅读:748

标签:出现   style   链表   lis   元素   题目   code   删除链表   一个   

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

示例 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)

标签:出现   style   链表   lis   元素   题目   code   删除链表   一个   

原文地址:https://www.cnblogs.com/ZSY-blog/p/12805939.html


评论


亲,登录后才可以留言!