C++一个链表拆分成两个链表完整代码
时间: 2024-09-25 14:01:22 浏览: 34
C++ 链表拆分
4星 · 用户满意度95%
在C++中,将一个单链表拆分成两个独立的链表,通常是在节点数目为奇数的情况下,可以将最后一个节点单独作为一个新的链表,而其他节点形成另一个链表。这里是一个简单的示例代码:
```cpp
#include <iostream>
// 链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* splitList(ListNode* head) {
if (!head || !head->next) { // 如果链表为空或只有一个元素
return head;
}
ListNode* slow = head; // 指针slow每次移动一步
ListNode* fast = head->next; // 指针fast每次移动两步
// 当fast指针到达链表末尾时,slow指针停在倒数第二个节点
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
// 将慢速指针后的部分从原链表断开,并作为新链表的头
ListNode* newHead = slow->next;
slow->next = nullptr;
return newHead;
}
// 打印链表
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " ";
head = head->next;
}
std::cout << std::endl;
}
int main() {
// 创建一个测试链表
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(3);
list->next->next->next = new ListNode(4);
ListNode* newHead = splitList(list);
std::cout << "Original List: ";
printList(list);
std::cout << "Split List: ";
printList(newHead);
return 0;
}
```
这个代码首先通过快慢指针找到链表的中间位置,然后将原链表在中间断开。`splitList`函数返回新的链表头部,而原始链表保持不变。
阅读全文