LeetCode 328.奇偶链表
ListNode* oddEvenList(ListNode* head) {
if(head == nullptr || head -> next == nullptr){
return head;
}
// odd代表奇数链表尾节点,evenhead代表偶数链表头节点,even代表偶数链表尾节点
ListNode *odd = head,*evenhead = head -> next,*even = evenhead;
while(even && even -> next){
odd -> next = even -> next; // 更新奇数节点
odd = odd -> next;
even -> next = odd -> next; // 更新偶数节点
even = even -> next;
}
// 完成奇偶链表的分离
odd -> next = ehead; // 将两个链表串起来
return head;
}
时间复杂度:O(n),其中 n 是链表的节点数。需要遍历链表中的每个节点,并更新指针。
空间复杂度:O(1)。只需要维护有限的指针。