题目
题目链接
题目描述
代码实现
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* oddEvenList(ListNode* head) {
// write code here
if(head == nullptr) return nullptr;
ListNode *odd = head, *even = head->next, *evenHead = even;
while(even && even->next){
/*奇数位更新*/
odd->next = even->next;
odd = odd->next;
/*偶数位更新*/
even->next = odd->next;
even = odd->next;
}
odd->next = evenHead;//将奇数位和偶数位连接起来
return head;
}
};
思路分析
本题是将链表的奇数位相连,偶数位相连。故可采用双指针的思路。一个指针指向奇数位,另一个指针则指向偶数位。
1、奇数位更新的时候。下一个奇数位是在偶数位后边,故需要连在偶数位的后边。然后再将奇数位更新到偶数位后边的节点。
2、偶数位的更新可以参照奇数位跟新的过程。
更新过程可以参考下边的图示
3、奇数位和偶数位更新后,需要将奇数位和偶数位的头部连接起来成为完整的链表。
4、最后需要考虑一下特殊情况,就是链表为空的时候,就能直接返回空指针即可。