题目
题目链接
链表的奇偶重排_牛客题霸_牛客网
题目描述
代码实现
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @return ListNode类*/ListNode* oddEvenList(ListNode* head) {// write code hereif(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、最后需要考虑一下特殊情况,就是链表为空的时候,就能直接返回空指针即可。