
已建立linklist.h文件,将负数按原来顺序列表负数顺序放在非负数之前。
2302_79603878 下午好🌅🌅🌅
本答案参考ChatGPT-3.5
算法设计思想:
实现算法的步骤:
时间复杂度分析: 遍历原链表的时间复杂度为O(n),其中n为链表的长度。没有使用额外的数据结构,所以空间复杂度为O(1)。
以下是具体的代码实现:
#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
};
Node* moveNegativeBeforeNonNegative(Node* head) {
Node* p = head->next;
Node* negativeHead = new Node();
Node* negativeTail = negativeHead;
Node* nonNegativeHead = new Node();
Node* nonNegativeTail = nonNegativeHead;
while (p != nullptr) {
if (p->data < 0) {
negativeTail->next = p;
negativeTail = negativeTail->next;
} else {
nonNegativeTail->next = p;
nonNegativeTail = nonNegativeTail->next;
}
p = p->next;
}
negativeTail->next = nonNegativeHead->next;
nonNegativeTail->next = nullptr;
head->next = negativeHead->next;
delete negativeHead;
delete nonNegativeHead;
return head;
}
// 测试代码
void printList(Node* head) {
Node* p = head->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
Node* head = new Node(); // 头结点
Node* p = head;
int arr[] = {1, -2, 3, -4, 5}; // 测试数据
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
Node* newNode = new Node();
newNode->data = arr[i];
newNode->next = nullptr;
p->next = newNode;
p = p->next;
}
cout << "原链表:";
printList(head);
head = moveNegativeBeforeNonNegative(head);
cout << "调整后的链表:";
printList(head);
return 0;
}
希望可以帮助到你,如果有其他问题,请继续提问。