Leetcode--83删除排序链表中的重复元素 简单

题目:力扣

Leetcode--83删除排序链表中的重复元素 简单_第1张图片

 

解题思路1:设计pre和p两个指针,判断pre和p指向的节点是否相等,若相等则让p=p->next,pre->next指向p,否则pre=p,p=p->next;

注意考虑到只有一个节点和空链表的情况以及对于最后节点情况的处理

解题思路2:递归

代码:解题思路1

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

你可能感兴趣的:(leetcode,算法,c++)