题目链接
解题思路
- 首先将编号为奇数的结点都放在一起变成一个单链表
- 然后将编号为偶数的结点都放在一起变成一个单链表
- 最后将偶链表连接到奇链表之后即可
- 维护两个指针
odd
和even
分别指向奇数结点和偶数结点。初始时odd = head
,even = head.next
- 更新奇数结点时,奇数结点的后一个结点需要指向偶数结点的后一个结点,因此令
odd.next = evev.next
,然后令odd = odd.next
,此时odd
变成even
的后一个结点 - 更新偶数结点时,偶数结点的后一个结点需要指向奇数结点的后一个结点,因此令
even.next = odd.next
,然后令even = even.next
,此时even
变成odd
的后一个结点 - 最后令
odd.next = head.next
,将偶数链表连接在奇数链表之后
AC代码
class Solution {
public ListNode oddEvenList(ListNode head) {
if (head == null)
return null;
ListNode evenHead = head.next;
ListNode odd = head, even = evenHead;
while (even != null && even.next != null) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
}