题目:
分析:按节点编号奇偶性排序。可以想到按奇数排成一个链表,偶数排成一个链表,然后把偶数的链表拼到奇数的后面即可。
节点位置的奇偶性都不需要特殊判断,因为链表首节点就是奇数节点,它的下一个就是偶数节点
记录奇数链的末尾和偶数链的末尾,每次修改它们的next即可
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode oddEvenList(ListNode head) {
if(head == null){
return null;
}
ListNode oddEnd = head;
ListNode evenHead = head.next;
ListNode evenEnd = evenHead;
//一开始evenEnd比oddEnd位置后一个,所以要判断evenEnd及evenEnd.next是否为null
while(evenEnd != null && evenEnd.next != null){
oddEnd.next = oddEnd.next.next;
oddEnd = oddEnd.next;
evenEnd.next = evenEnd.next.next;
evenEnd = evenEnd.next;
}
oddEnd.next = evenHead;
return head;
}
}