LeetCode 328 奇偶链表
https://leetcode-cn.com/problems/odd-even-linked-list/
将链表分成奇数节点和偶数节点这两类链表,然后将偶数节点这个链表链接到奇数节点这个链表的后面即可。相较于力扣官方提供的题解,下面的代码中多了一个变量cnt
用于记录所遍历到节点的序号,根据序号的奇偶性将当前节点挂到相应的链表之上。看个人吧,我觉得下面的代码要比官方题解更好理解一点。需要注意的是务必将偶数节点链表的最后一个节点(排序后链表的最后一个节点)的next
给赋值为nullptr
,否则力扣在判题的过程中会报错。
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
ListNode even(0), odd(0);
ListNode *peven = &even; // 偶
ListNode *podd = &odd; // 奇
int cnt = 1;
for (ListNode *p = head; p != nullptr; p = p->next) {
if (cnt % 2) {
podd->next = p;
podd = podd->next;
}
else {
peven->next = p;
peven = peven->next;
}
++cnt;
}
// do NOT forget this step
peven->next = nullptr;
podd->next = even.next;
return odd.next;
}
};