c++单链表删除相同的结点
时间: 2024-10-08 10:22:37 浏览: 18
在C++中,如果你想要从单链表中删除所有相同的节点,通常你会遍历整个链表,并维护一个指针来跟踪当前已遇到的不同节点。以下是删除相同节点的一个基本步骤:
1. 定义一个结构体或类表示链表节点,包含数据成员和指向下一个节点的指针。
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
2. 创建一个函数,接受链表头节点作为输入参数:
```cpp
ListNode* removeDuplicates(ListNode* head) {
```
3. 初始化两个指针,`current`用于遍历链表,`prev`用于记录上一个不同节点:
```cpp
ListNode* current = head;
ListNode* prev = nullptr;
```
4. 遍历链表,如果当前节点的值与前一个节点不同,则将其设置为新的前一个节点;否则,将前一个节点的next指向前一个节点的下一个节点,跳过重复的节点:
```cpp
while (current != nullptr) {
if (prev != nullptr && prev->val == current->val) {
prev->next = current->next;
} else {
prev = current;
}
current = current->next;
}
```
5. 返回头节点,因为可能有多个重复元素在最开始:
```cpp
return head;
```
阅读全文