本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。
时间: 2023-05-21 21:06:49 浏览: 54
你可以通过以下函数来实现这个功能:
```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() 函数将链表中奇数值的结点重新组成一个新的链表。具体实现是通过两个链表来存储新链表的奇数结点与偶数结点,最后将它们拼接成一个新的链表返回。