某非空单链表L中的所有元素为整数。设计算法,将所有小于0的节点移动到所有大于0的节点之前,用cpp语言来写
时间: 2024-10-27 08:04:18 浏览: 37
在C++中,你可以通过迭代遍历单链表的方式来实现这个功能。首先,我们需要定义两个指针,一个指向当前元素(`current`),另一个用于保存前一个正数节点(`prevPositive`)。当找到负数节点时,我们会在它们前面插入所有的正数节点。以下是具体的算法步骤:
```cpp
#include <iostream>
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* moveNegativeNodes(ListNode* head) {
if (head == nullptr || head->val >= 0) {
return head; // 如果链表为空或头节点是非负数,直接返回
}
ListNode* prevPositive = nullptr; // 初始化前一个正数节点为null
ListNode* current = head;
while (current != nullptr) {
if (current->val >= 0) { // 找到正数节点
if (prevPositive != nullptr) {
prevPositive->next = current; // 将正数节点链接到前一个正数节点之后
} else {
head = current; // 如果这是第一个正数节点,设为新的头节点
}
prevPositive = current; // 更新前一个正数节点
} else { // 找到负数节点
current->next = prevPositive->next; // 将负数节点移动到正数节点链表的前面
prevPositive->next = current; // 将负数节点连接到前一个正数节点
}
current = current->next;
}
return head; // 返回新的链表头节点
}
int main() {
// 创建示例链表并调用函数
ListNode* list = new ListNode(-1);
list->next = new ListNode(3);
list->next->next = new ListNode(-4);
list->next->next->next = new ListNode(2);
ListNode* result = moveNegativeNodes(list);
// 输出结果链表...
delete result;
return 0;
}
```
阅读全文