用c++如何把一个链表分为奇链表和一个偶链表
时间: 2024-03-13 22:38:34 浏览: 13
可以通过遍历链表,将奇数位置的节点和偶数位置的节点分别连接起来,形成奇链表和偶链表。具体实现步骤如下(假设链表头节点为head):
```c++
ListNode* oddEvenList(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* odd = head;
ListNode* even = head->next;
ListNode* 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;
}
```
相关问题
用c++输出一个链表
以下是用C++输出一个链表的示例代码:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 输出链表
void printList(ListNode* head) {
ListNode* p = head;
while (p != NULL) {
cout << p->val << " ";
p = p->next;
}
}
int main() {
// 创建链表
ListNode* head = new ListNode(1);
ListNode* node1 = new ListNode(2);
ListNode* node2 = new ListNode(3);
head->next = node1;
node1->next = node2;
// 输出链表
printList(head);
return 0;
}
```
如何用c++创建一个链表
要用C语言创建一个链表,首先需要定义一个链表节点的结构体,然后通过动态内存分配来创建节点。每个节点包含一个数据元素和一个指向下一个节点的指针。
下面是一个示例代码,展示了如何创建一个简单的链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 创建链表节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data;
newNode->next = NULL;
return newNode;
}
int main() {
// 创建链表头节点
struct Node* head = createNode(1);
// 创建其他节点并链接到链表
struct Node* second = createNode(2);
struct Node* third = createNode(3);
head->next = second;
second->next = third;
// 遍历链表并打印节点的数据
struct Node* current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
// 释放链表节点的内存
current = head;
while (current != NULL) {
struct Node* temp = current;
current = current->next;
free(temp);
}
return 0;
}
```
在上述代码中,我们首先定义了一个结构体`Node`来表示链表节点。然后通过`createNode`函数来创建新的节点,并使用动态内存分配函数`malloc`为节点分配内存。在`main`函数中,我们使用`createNode`函数创建了三个节点,并将它们链接在一起形成了一个简单的链表。最后,我们遍历链表并打印每个节点的数据。记得在程序结束前释放链表节点的内存空间。