本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下
时间: 2023-04-28 08:01:08 浏览: 117
:链表结点定义:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
实现函数:
ListNode* createList(vector<int>& nums); // 将读入的数据存储为单链表
ListNode* oddEvenList(ListNode* head); // 将链表中奇数值的结点重新组成一个新的链表
相关问题
本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。
你可以通过以下函数来实现这个功能:
```c++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createList(vector<int>& nums) {
if (nums.empty()) {
return NULL;
}
ListNode* head = new ListNode(nums[0]);
ListNode* cur = head;
for (int i = 1; i < nums.size(); i++) {
cur->next = new ListNode(nums[i]);
cur = cur->next;
}
return head;
}
ListNode* oddEvenList(ListNode* head) {
if (head == NULL) {
return NULL;
}
ListNode* oddHead = NULL;
ListNode* oddTail = NULL;
ListNode* evenHead = NULL;
ListNode* evenTail = NULL;
ListNode* cur = head;
int cnt = 1;
while (cur != NULL) {
if (cnt % 2 == 1) {
if (!oddHead) {
oddHead = cur;
oddTail = cur;
} else {
oddTail->next = cur;
oddTail = oddTail->next;
}
} else {
if (!evenHead) {
evenHead = cur;
evenTail = cur;
} else {
evenTail->next = cur;
evenTail = evenTail->next;
}
}
cur = cur->next;
cnt++;
}
if (oddTail) {
oddTail->next = evenHead;
}
if (evenTail) {
evenTail->next = NULL;
}
return oddHead;
}
```
上面的代码中,createList() 函数可以将读入的数据存储为单链表,oddEvenList() 函数将链表中奇数值的结点重新组成一个新的链表。具体实现是通过两个链表来存储新链表的奇数结点与偶数结点,最后将它们拼接成一个新的链表返回。
要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表
好的,我可以回答这个问题。以下是两个函数的实现:
1. 将读入的数据存储为单链表:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *createList() {
Node *head = NULL, *tail = NULL;
int num;
while (scanf("%d", &num) == 1) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
if (head == NULL) {
head = tail = newNode;
} else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
```
2. 将链表中奇数值的结点重新组成一个新的链表:
```c
Node *getOddList(Node *head) {
Node *oddHead = NULL, *oddTail = NULL;
Node *p = head;
while (p != NULL) {
if (p->data % 2 == 1) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = p->data;
newNode->next = NULL;
if (oddHead == NULL) {
oddHead = oddTail = newNode;
} else {
oddTail->next = newNode;
oddTail = newNode;
}
}
p = p->next;
}
return oddHead;
}
```
希望这可以帮助你!
阅读全文