原理鏈接:https://leetcode-cn.com/problems/odd-even-linked-list/
1、雙指針
ListNode* oddEvenList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode *p=head,*q=head->next;
ListNode *pre_p=p,*pre_q=q;
while(p->next!=NULL&&q->next!=NULL){
p->next=p->next->next;
if(p->next!=NULL) p=p->next;
q->next=q->next->next;
if(q->next!=NULL) q=q->next;
}
p->next=pre_q;
q->next=NULL;
return pre_p;
}
2、雙鏈表
利用兩個奇偶鏈表odd和even分別存儲原鏈表的節點,最後將偶鏈表even接在奇鏈表odd後面,並且可以直接用odd和even替代迭代指針p,使代碼更加簡潔
ListNode* oddEvenList(ListNode* head) {
if(head==NULL) return head;
ListNode *odd=head,*even=head->next,*evenhead=head->next;
while(even!=NULL&&even->next!=NULL){
odd->next=even->next;
odd=odd->next;
even->next=odd->next;
even=even->next;
}
odd->next=evenhead;
return head;
}