链表重排 描述 输入一个链表,请你对这个链表进行重新分组排列:所有索引为奇数的节点为第一组,所有索引为偶数的节点为第二组。 第一个节点被看作奇数节点,重新排列后的两组内部的相对顺序应该与输入时保持一致。 输入 输入一串正整数和-1,两个数之间用空格隔开,以-1作为结束标记;只有正整数和-1,不会出现其他数,且-1一定出现在最后。 输出 输出重新排列后的链表,每个正整数后面有一个空格。 如果输入链表为空,则输出-1。
时间: 2023-06-03 16:07:04 浏览: 73
c代码-给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。
抱歉,我可以回答你关于链表重排的问题。以下是代码实现:
#include <iostream>
#include <vector>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* oddEvenList(ListNode* head) {
if (!head || !head->next || !head->next->next)
return head;
ListNode* odd = head;
ListNode* even = head->next;
ListNode* even_head = even;
while (even && even->next) {
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = even_head;
return head;
}
int main() {
vector<int> nums;
int num;
while (cin >> num) {
if (num == -1)
break;
nums.push_back(num);
}
ListNode* head = new ListNode(0);
ListNode* cur = head;
for (int i = 0; i < nums.size(); i++) {
cur->next = new ListNode(nums[i]);
cur = cur->next;
}
head = head->next;
ListNode* res = oddEvenList(head);
while (res) {
cout << res->val << ' ';
res = res->next;
}
cout << endl;
return 0;
}
输入示例:1 2 3 4 5 -1
输出示例:1 3 5 2 4
阅读全文