328.奇偶链表

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 }

 

posted @ 2019-10-28 22:15  teensSpirit  阅读(112)  评论(0编辑  收藏  举报