题目链接
奇偶链表
题目描述
注意点
- 在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题
- 偶数组和奇数组内部的相对顺序应该与输入时保持一致
解答思路
- 奇数组的头节点是head,偶数组的头节点是head.next,关键是要改变每个节点的next指针及找到奇数组的尾节点,注意在改变节点next指针时,不能将中间的节点忽略了
代码
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode oddEvenList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode oddRoot = new ListNode();oddRoot.next = head;ListNode evenRoot = new ListNode();evenRoot.next = head.next;boolean isOdd = true;while (head != null) {ListNode tmp = head.next;if (head.next != null) {head.next = head.next.next;}// 找到了奇数尾节点if (isOdd && head.next == null) {head.next = evenRoot.next;}head = tmp;isOdd = !isOdd;}return oddRoot.next;}
}
关键点
- 改变节点next指针时不要忽略中间节点
- 找到奇数组的尾节点