将单链表按基准划分,编写一个程序( exp2-6. cpp,以给定值x为基准将单链表分割为两部分,所有小于x 的结点排在大于或等于x 的结点之前
时间: 2024-11-22 07:37:18 浏览: 31
在编程中,如果需要将单链表按照给定值`x`进行划分,可以创建两个新的链表:一个小于`x`的链表和一个大于等于`x`的链表。以下是使用C++的一个基本步骤描述:
1. 首先,你需要定义一个Node结构体表示链表节点,包含数据元素和指向下一个节点的指针。
```cpp
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
2. 然后定义两个函数,一个用于遍历链表,另一个用于分割节点。你可以设置两个指针,`pLess`指向小于`x`的部分,`pGreaterEqual`指向大于等于`x`的部分。同时,有一个临时指针`temp`用于在找到满足条件的节点时进行切换。
```cpp
void splitList(ListNode*& pHead, int x) {
ListNode* pLess = nullptr;
ListNode* pGreaterEqual = nullptr;
ListNode* temp = pHead;
while (temp != nullptr) {
if (temp->val < x) {
if (pLess == nullptr) {
pLess = temp;
} else {
pLess->next = temp;
}
pLess = temp; // 更新pLess
} else {
if (pGreaterEqual == nullptr) {
pGreaterEqual = temp;
} else {
pGreaterEqual->next = temp;
}
}
temp = temp->next;
}
// 连接两个链表
if (pLess != nullptr) {
pLess->next = pGreaterEqual;
}
}
```
3. 最后,调用`splitList`函数,并传入链表头节点和基准值`x`。
```cpp
int main() {
ListNode* head = createLinkedList(); // 创建你的链表
int x = 5; // 示例中的基准值
splitList(head, x);
// ...其他操作,如打印链表等
return 0;
}
```
阅读全文