需要完整程序,包括main
时间: 2024-03-05 14:47:30 浏览: 23
好的,下面给出完整的程序,包括链表节点的创建和遍历,以及主函数:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
ListNode* createList(int arr[], int n) {
if (n == 0) {
return NULL;
}
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->val = arr[0];
head->next = NULL;
ListNode* p = head;
for (int i = 1; i < n; i++) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
node->val = arr[i];
node->next = NULL;
p->next = node;
p = p->next;
}
return head;
}
void printList(ListNode* head) {
ListNode* p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
ListNode* oddEvenList(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode* oddHead = head;
ListNode* evenHead = head->next;
ListNode* odd = head;
ListNode* even = head->next;
while (even != NULL && even->next != NULL) {
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = evenHead;
return oddHead;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
ListNode* head = createList(arr, n);
printf("Original List: ");
printList(head);
head = oddEvenList(head);
printf("New List: ");
printList(head);
return 0;
}
```
在主函数中,我们先创建了一个原始的链表,然后调用 oddEvenList 函数对链表进行操作,最后输出结果。