1.题目描述:
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。
2.解题思路及代码:
生成一个奇链表,一个偶链表,链接二者。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode oddEvenList(ListNode head) { 11 if(head==null) 12 return null; 13 ListNode odd=head; 14 ListNode even=head.next; 15 ListNode evenH=head.next; 16 while(even!=null && even.next!=null){//注意,这里判断条件只能用even指针,若用odd指针,当链表节点数为偶数时会出现空指针错误 17 odd.next=even.next; 18 odd=odd.next; 19 even.next=odd.next; 20 even=even.next; 21 } 22 odd.next=evenH; 23 return head; 24 } 25 }