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)的主要内容,如果未能解决你的问题,请参考以下文章