奇偶链表
题目描述:
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。
示例 1:
输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL
示例 2:
输入: 2->1->3->5->6->4->7->NULL
输出: 2->3->6->7->1->5->4->NULL
链接:
328. 奇偶链表 - 力扣(LeetCode) (leetcode-cn.com)
解题思路
思路一:奇偶指针
奇偶指针循环链表,奇数指针不断串连奇数节点,偶数指针不断串连偶数节点,最后奇数指针的结尾连接偶数节点的开始
/*** @param {ListNode} head* @return {ListNode}*/
var oddEvenList = function (head) {if (head === null || head.next === null) {return head;}var odd = head,even = head.next,evenHead = head.next;while (even != null && even.next != null) { // 偶数指针不为空 继续循环odd.next = odd.next.next;odd = odd.next;even.next = even.next.next;even = even.next;}odd.next = evenHead; // 奇数指针结尾连接上偶数指针的开始return head;
};
时间复杂度: O(n)
空间复杂度: O(1)