C++:链表元素去重算法(带完整源码)
在 C++ 编程中,链表是我们经常需要用到的一种数据结构。当链表中存在重复的元素时,我们需要通过去重算法来将其去除。下面我将向大家介绍一种行之有效的链表去重算法,并提供完整源码以及相应的描述。
实现思路:
-
首先我们需要判断链表是否为空,如果为空直接返回;否则进入第二步。
-
创建一个 map 容器,将链表的头节点存入 map 容器中,因为此时链表中肯定不含有重复的元素。
-
定义一个指针 p 指向链表的头节点,遍历整个链表,每次取出一个节点,判断节点的值是否已经在 map 中出现过。如果节点的值没有在 map 中出现过,则说明此时链表中不存在相同的节点,将该节点存入 map 容器中并将 p 指针向后移动一位;否则,说明此时链表中存在相同的节点,将该节点删除。
-
当 p 指针遍历完整个链表后,链表去重操作完成,返回链表头节点即可。
下面是完整的源码实现:
#include <iostream>
#include <map>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head) return head;
map<int, bool> m;