设有一个整数顺序表,编写函数将其调整为奇数在前,偶数在后。用c++实现在单链表中
时间: 2024-03-09 08:06:26 浏览: 92
以下是单链表的实现代码:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* oddEvenList(ListNode* head) {
if (!head) return NULL;
ListNode *odd = head, *even = head->next, *evenHead = even;
while (even && even->next) {
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = evenHead;
return head;
}
void printList(ListNode* head) {
ListNode* curr = head;
while (curr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
// create a linked list
ListNode *head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
// print the original list
cout << "Original list: ";
printList(head);
// rearrange the list
head = oddEvenList(head);
// print the rearranged list
cout << "Rearranged list: ";
printList(head);
return 0;
}
```
首先,我们定义一个 `ListNode` 结构体,包含一个整数值和一个指向下一个节点的指针。
然后,我们定义一个 `oddEvenList` 函数,它接受一个单链表的头节点作为参数,并且将链表中的奇数节点放在前面,偶数节点放在后面。我们用两个指针 `odd` 和 `even` 分别指向链表的第一个和第二个节点,用 `evenHead` 记录下第二个节点,以便最后将链表连接起来。我们用 `while` 循环遍历链表,每次将 `odd` 指针指向下一个奇数节点,将 `even` 指针指向下一个偶数节点,然后将它们分别连接起来。最后,我们将最后一个奇数节点的 `next` 指向第二个节点,将整个链表连接起来。最后,我们返回头节点。
最后,我们定义一个 `printList` 函数,用于打印单链表的所有节点。在主函数中,我们创建一个单链表并将其传递给 `oddEvenList` 函数,然后打印出原始链表和重新排列后的链表。
阅读全文