使用dev-c++完成线性表的应用算法 创建结点数:5 依次输入结点值:1 2 3 4 5 拆分后的结果: 奇数链表:1 3 5 偶数链表:2 4 将两链表合并: 合并结果为:5 4 3 2 1 的源代码
时间: 2024-10-28 08:15:25 浏览: 34
在Dev-C++中创建一个线性表应用算法,你可以按照以下步骤编写一个简单的程序来实现奇数链表和偶数链表的拆分以及合并操作:
首先,你需要定义一个单链表节点结构,然后分别创建两个链表,一个用于存储奇数,一个用于存储偶数。
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 创建链表函数
ListNode* createList(int n, int arr[]) {
ListNode* head = new ListNode(arr[0]);
ListNode* temp = head;
for (int i = 1; i < n; i++) {
temp->next = new ListNode(arr[i]);
temp = temp->next;
}
return head;
}
// 拆分链表函数
void splitList(ListNode*& head, ListNode*& oddHead, ListNode*& evenHead) {
ListNode* oddTail = nullptr;
ListNode* evenTail = nullptr;
ListNode* current = head;
while (current != nullptr) {
if (current->val % 2 == 0) {
if (evenHead == nullptr) {
evenHead = oddHead = current;
evenTail = oddTail = current;
} else {
evenTail->next = current;
evenTail = current;
}
} else {
if (oddHead == nullptr) {
oddHead = current;
oddTail = current;
} else {
oddTail->next = current;
oddTail = current;
}
}
current = current->next;
}
}
// 合并链表函数
ListNode* mergeLists(ListNode* oddHead, ListNode* evenHead) {
ListNode* mergedHead = nullptr;
if (oddHead == nullptr) return evenHead;
if (evenHead == nullptr) return oddHead;
if (oddHead->val <= evenHead->val) {
mergedHead = oddHead;
oddHead = oddHead->next;
} else {
mergedHead = evenHead;
evenHead = evenHead->next;
}
ListNode* tail = mergedHead;
while (oddHead != nullptr && evenHead != nullptr) {
if (oddHead->val <= evenHead->val) {
tail->next = oddHead;
oddHead = oddHead->next;
} else {
tail->next = evenHead;
evenHead = evenHead->next;
}
tail = tail->next;
}
// 如果有一个链表未遍历完,直接添加剩下的部分到结果链表尾部
if (oddHead != nullptr) tail->next = oddHead;
if (evenHead != nullptr) tail->next = evenHead;
return mergedHead;
}
int main() {
int nodes = 5;
int input[] = {1, 2, 3, 4, 5};
ListNode* head = createList(nodes, input);
ListNode* oddHead, *evenHead;
splitList(head, oddHead, evenHead);
cout << "奇数链表: ";
printList(oddHead);
cout << "\n偶数链表: ";
printList(evenHead);
ListNode* mergedHead = mergeLists(oddHead, evenHead);
cout << "\n合并结果: ";
printList(mergedHead);
return 0;
}
// 辅助函数:打印链表
void printList(ListNode* node) {
while (node != nullptr) {
cout << node->val << " ";
node = node->next;
}
cout << endl;
}
```
这个程序会首先创建一个包含给定值的链表,然后拆分成奇数链表和偶数链表,并将它们合并。注意,这里假设所有输入都是正整数。
阅读全文