题目
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
// 思路:
// 定义虚拟的奇偶链表头尾来确定
// 头部确定用来定位其实链表位置
// 尾部用来串联奇偶链表
// 易错点:
// oddTail = oddTail->next; 注意此条指令
// 尾部节点重新指向后,还要重新赋值尾部节点到指向位置。用来串联节点!!!
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
// 定义奇数链表节点
ListNode* oddHead = new ListNode();
ListNode* oddTail = oddHead;
// 定义偶数链表节点
ListNode* evenHead = new ListNode();
ListNode* evenTail = evenHead;
bool isOdd = true;
// 遍历所有节点
while(head != nullptr) {
if(isOdd) { // 为奇数节点
oddTail->next = head;
oddTail = oddTail->next;
} else { // 为偶数节点
evenTail->next = head;
evenTail = evenTail->next;
}
isOdd = !isOdd;
head = head->next;
}
evenTail->next = nullptr;
oddTail->next = evenHead->next;
return oddHead->next;
}
};