奇偶链表
题目
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数,第二个节点的索引为 偶数,以此类推。
想法
双指针法 (交替):
- 设置一个偶数指针
even
,一个奇数指针odd
,以及记录偶数的头指针也就是初始化的event
,这里记为eHead
- 偶数指针的
next
结点为奇数指针的next
结点,奇数指针的next
节点为偶数指针的next
节点 - 合并,令奇数链最后一个结点的 next 指向之前记录的偶数链的头指针
eHead
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* oddEvenList(struct ListNode* head){
if(head==NULL||head->next==NULL){
return head;
}
struct ListNode* odd=head;
struct ListNode* even=head->next;
struct ListNode* eHead=even;
while(even&&even->next){
odd->next=even->next;
odd=odd->next;
even->next=odd->next;
even=even->next;
}
odd->next=eHead;
return head;
}