题意:把一个链表中奇数位置的所有节点放到前边,偶数位置的所有节点放到后边,要保序
解法:用两个节点分别记录当前奇数节点和偶数节点的最后一个节点,并用一个runner来遍历链表,每次两个,把第一个放到奇数节点尾部,把第二个放到偶数节点尾部,最后用一个头结点来方便返回
public class Solution {
public ListNode oddEvenList(ListNode head) {
if(head == null)
return null;
ListNode newhead = new ListNode(0);
newhead.next = head;
ListNode odd = head;
ListNode even = head.next;
ListNode runner = null;
if(even != null)
runner = even.next;
while(runner != null && runner.next != null)
{
even.next = runner.next;
even = even.next;
runner.next = odd.next;
odd.next = runner;
odd = odd.next;
runner = even.next;
}
if(runner!=null)
{
even.next = null;
runner.next = odd.next;
odd.next = runner;
}
return newhead.next;
}
}