算法题14:链表的奇偶重排
思路
利用odd和even双指针,改变链表原有结构,将odd指向even的下一位,odd移位,even指向odd的下一位,even移位,循环直到末尾,再将odd末位连接even首位。
代码
ListNode* oddEvenList(ListNode* head) {
// write code here
if(head==NULL || head->next==NULL) return head;
// 将奇数位结点链接,偶数位结点链接,奇数末位结点链接偶数首位
ListNode *odd = head;
ListNode *even = head->next;
ListNode *odd_tail = odd; //记录奇数末位和偶数首位
ListNode *even_head = even;
while(even!=NULL && even->next!=NULL){
// odd指向even后一位
odd->next = even->next;
// odd向后移位
odd = odd->next;
// even指向odd后一位
even->next = odd->next;
// even向后移位
even = even->next;
odd_tail = odd;
}
odd_tail->next = even_head; //连接奇偶位
return head;
}