cpp描述 有一个非空整数单链表L,设计一个算法删除值重复的节点,多个值相同的节点仅保留第一个。 输入 8 1 4 1 2 2 1 3 4 输出 1 4 2 3
时间: 2024-09-18 08:14:57 浏览: 57
cpp代码-定义一个单链表并赋值
在C++中,你可以使用迭代的方式来解决这个问题。首先,你需要定义一个双向链表节点结构,然后创建一个函数来处理这个操作。以下是大致的步骤:
1. 定义一个`Node`类,包含数据成员`val`和指向前后节点的指针`prev`和`next`。
```cpp
class Node {
public:
int val;
Node* prev;
Node* next;
// 构造函数和其他必要的成员函数
};
```
2. 创建一个名为`removeDuplicates`的函数,接受链表头节点`head`作为参数。
```cpp
Node* removeDuplicates(Node* head) {
if (!head || !head->next) {
return head;
}
Node* current = head;
Node* uniqueHead = nullptr;
while (current) {
Node* runner = current->next;
while (runner && runner->val == current->val) { // 找到当前值的下一个不同节点
runner = runner->next;
}
current->next = runner; // 更新当前节点的下一个节点
if (!uniqueHead) { // 如果这是第一个不同值,设置新的头节点
uniqueHead = current;
} else {
current->prev->next = current; // 连接上一个不同值节点到当前节点
}
current = runner; // 移动当前节点到找到的不同位置
}
return uniqueHead;
}
```
3. 测试函数:
```cpp
int main() {
// 创建一个示例链表并插入元素
Node* list = createLinkedList({8, 1, 4, 1, 2, 2, 1, 3, 4}); // 实现createLinkedList函数来构造链表
// 删除重复值
Node* result = removeDuplicates(list);
// 输出结果
printLinkedList(result); // 实现printLinkedList函数来打印链表
return 0;
}
```
阅读全文