题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
//如果链表为空,不用重排
if(head == NULL)
return head;
//even开头指向第二个节点,可能为空
ListNode* even = head->next;
//odd开头指向第一个节点
ListNode* odd = head;
//指向even开头
ListNode* evenhead = even;
while(even != NULL && even->next != NULL){
//odd连接even的后一个,即奇数位
odd->next = even->next;
//odd进入后一个奇数位
odd = odd->next;
//even连接后一个奇数的后一位,即偶数位
even->next = odd->next;
//even进入后一个偶数位
even = even->next;
}
//even整体接在odd后面
odd->next = evenhead;
return head;
}
};
// /**
// * struct ListNode {
// * int val;
// * struct ListNode *next;
// * ListNode(int x) : val(x), next(nullptr) {}
// * };
// */
// #include <vector>
// class Solution {
// public:
// /**
// * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
// *
// *
// * @param head ListNode类
// * @return ListNode类
// */
// ListNode* oddEvenList(ListNode* head) {
// // write code here
// // 利用数组吧,可以用两个数组分别存放奇数位和偶数位元素;
// // 也可以稍加优化,直接用一个数组存放偶数位;
// vector<int> even_num;
// ListNode* ans = new ListNode(-1);
// ListNode* temp = ans;
// int i=1;
// while(head)
// {
// // 奇数位
// if(i%2)
// {
// ListNode* num = new ListNode(head->val);
// temp->next = num;
// temp = temp->next;
// }
// else
// {
// even_num.emplace_back(head->val);
// }
// ++i;
// head = head->next;
// }
// for(auto i: even_num)
// {
// ListNode* num = new ListNode(i);
// temp->next = num;
// temp = temp->next;
// }
// return ans->next;
// }
// };
C++题库 文章被收录于专栏
非淡泊无以明志,非宁静无以致远

查看8道真题和解析